組件是 Yii 應(yīng)用的主要基石。是 yiibaseComponent 類或其子類的實(shí)例。 三個用以區(qū)分它和其它類的主要功能有:
屬性(Property) (推薦學(xué)習(xí):yii框架)
事件(Event)
行為(Behavior)
或單獨(dú)使用,或彼此配合,這些功能的應(yīng)用讓 Yii 的類變得更加靈活和易用。 以小部件 yiijuiDatePicker 來舉例, 這是個方便你在 視圖 中生成一個交互式日期選擇器的 UI 組件:
use yiijuiDatePicker; echo DatePicker::widget([ 'language' => 'zh-CN', 'name' => 'country', 'clientOptions' => [ 'dateFormat' => 'yy-mm-dd', ], ]);use yiijuiDatePicker; echo DatePicker::widget([ 'language' => 'zh-CN', 'name' => 'country', 'clientOptions' => [ 'dateFormat' => 'yy-mm-dd', ], ]);
這個小部件繼承自 yiibaseComponent,它的各項(xiàng)屬性改寫起來會很容易。
正是因?yàn)榻M件功能的強(qiáng)大,他們比常規(guī)的對象(Object)稍微重量級一點(diǎn),因?yàn)樗麄円褂妙~外的內(nèi)存和 CPU 時(shí)間來處理 事件 和 行為 。
如果你不需要這兩項(xiàng)功能,可以繼承 yiibaseObject 而不是 yiibaseComponent。這樣組件可以像普通 PHP 對象一樣高效, 同時(shí)還支持屬性(Property)功能。
當(dāng)繼承 yiibaseComponent 或 yiibaseObject 時(shí), 推薦你使用如下的編碼風(fēng)格:
若你需要重寫構(gòu)造方法(Constructor),傳入 $config 作為構(gòu)造器方法最后一個參數(shù), 然后把它傳遞給父類的構(gòu)造方法。
永遠(yuǎn)在你重寫的構(gòu)造方法結(jié)尾處調(diào)用一下父類的構(gòu)造方法。
如果你重寫了 yiibaseBaseObject::init() 方法,請確保你在 init 方法的開頭處調(diào)用了父類的 init 方法。
<?php namespace yiicomponentsMyClass; use yiibaseBaseObject; class MyClass extends BaseObject { public $prop1; public $prop2; public function __construct($param1, $param2, $config = []) { // ... 在應(yīng)用配置之前初始化 parent::__construct($config); } public function init() { parent::init(); // ... 應(yīng)用配置后進(jìn)行初始化 } }
另外,為了讓組件可以在創(chuàng)建實(shí)例時(shí)能被正確配置,請遵照以下操作流程:
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]); // 方法二: $component = Yii::createObject([ 'class' => MyClass::className(), 'prop1' => 3, 'prop2' => 4, ], [1, 2])