Yii2行爲

行爲是 yii\base\Behavior 或其子類的實例, 可以無須改變類繼承關係即可增強一個已有的 組件 類功能。所有組件類均可以使用行爲。通常註冊行爲有以下方式:

1  在組件類內部定義behaviors()函數,返回Behavior類數組,即可以是組件類對象訪問行爲內部所有公有屬性或函數方法。

public function behaviors()
{
    return [
        TimestampBehavior::class,
    ];
}

2 配置文件註冊行爲,前綴as,定義行爲名,然後在內部配置類名,初始化屬性。

'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'as a' => [
    'class' => \app\models\B::class,
    'id' => 1,
],

使用行爲的原因 

行爲類像普通類支持繼承。另一方面,traits 可以視爲 PHP 語言支持的複製粘貼功能, 它不支持繼承。

行爲無須修改組件類就可動態附加到組件或移除。 要使用 traits,必須修改使用它的類。

行爲是可配置的,而 traits 則不可行。

行爲可以通過響應事件來定製組件的代碼執行。

當附屬於同一組件的不同行爲之間可能存在名稱衝突時, 通過優先考慮附加到該組件的行爲, 自動解決衝突。由不同 traits 引起的名稱衝突需要通過 重命名受影響的屬性或方法進行手動解決。

使用 Traits 的原因

Traits 比行爲更有效,因爲行爲是既需要時間又需要內存的對象。

因爲 IDE 是一種本地語言結構,所以它們對 Traits 更友好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章