您好,登錄后才能下訂單哦!
這篇文章主要介紹yii2中組件是什么意思,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
組件是YII框架application(應用)的主要組成部分,它是 [yii\base\Component]的實例或者子類。組件有三個重要特征(功能):
·屬性(properties)
·事件(events)
·行為(behaviors)
單獨或者組合使用這些特征,可以讓yii框架的類變得更加易用和可定制。舉個例子,引入一個用戶交互組件[yii\jui\DataPicker\data picker wigets],可以很輕松的在視圖中生成一個日期選擇控件(jquery ui date picker)。
use yii\jui\DatePicker; echo DatePicker::widget([ 'language' => 'ru', 'name' => 'country', 'clientOptions' => [ 'dateFormat' => 'yy-mm-dd', ], ]);
DatePicker掛件的屬性很容易被修改,原因就在于他繼承了類[yii\base\Componet]
盡管組件很強大,但是其開銷也大于普通的類對象,原因在于組件需要額外的內存和CPU時間去處理事件(events)和行為(behaviors).如果你的組件不需要事件和行為這兩個特征(功能),可以直接繼承[yii\base\Object],這樣你的組件在性能(效率)上和普通類對象一致,且支持屬性(properties)。
編寫一個繼承[yii\base\Component]或者[yii\base\Object]的類,需要遵循以下約定:
·假設你重寫了構造函數,必須定義一個參數$config,作為構造函數的最后一個參數,此參數被傳遞給父類的構造函數使用
·在重寫的構造函數的結尾必須調用父類的構造函數
·假設你重寫了[yii\base\Object::init()|init()]方法,那么必須在重寫的init方法開始調用父類的init方法
舉個例子
namespace yii\components\MyClass; use yii\base\Object; class MyClass extends Object { public $prop1; public $prop2; public function __construct($param1, $param2, $config = []) { // ... initialization before configuration is applied parent::__construct($config); } public function init() { parent::init(); // ... initialization after configuration is applied } }
遵循如下示例,可使你的組件在創建時屬性即可被配置(初始化):
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]); // alternatively $component = \Yii::createObject([ 'class' => MyClass::className(), 'prop1' => 3, 'prop2' => 4, ], [1, 2]);
提示:使用[Yii::createOject()]的方式看起來更加復雜,但是因為[Yii::createObject]是基于依賴注入的實現,因此更加強大
[yii\base\Object]類強制實現如下生命周期:
(1)在構造函數里實現預初始化,可以在這個時候設定默認的屬性值;
(2)通過$config配置對象,在構造函數里通過對象配置可以覆蓋默認值;
(3)在[yii\base\Object::init()|init()]方法里,進行初始化后的配置。可以在init方法里實現例行檢查和屬性正常化檢查;
(4)對象方法調用。
開始的三個階段都在構造函數里實現,這意味著當你得到一個對象的實例時,它已經被初始化為適當的狀態,可以被放心的使用。
以上是“yii2中組件是什么意思”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。