W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
組件是 Yii 應(yīng)用的主要基石。是 yii\base\Component 類或其子類的實(shí)例。三個(gè)用以區(qū)分它和其它類的主要功能有:
或單獨(dú)使用,或彼此配合,這些功能的應(yīng)用讓 Yii 的類變得更加靈活和易用。以小部件 yii\jui\DatePicker 來舉例,這是個(gè)方便你在?視圖中生成一個(gè)交互式日期選擇器的 UI 組件:
use yii\jui\DatePicker;
echo DatePicker::widget([
'language' => 'zh-CN',
'name' => 'country',
'clientOptions' => [
'dateFormat' => 'yy-mm-dd',
],
]);
這個(gè)小部件繼承自 yii\base\Component,它的各項(xiàng)屬性改寫起來會(huì)很容易。
正是因?yàn)榻M件功能的強(qiáng)大,他們比常規(guī)的對(duì)象(Object)稍微重量級(jí)一點(diǎn),因?yàn)樗麄円褂妙~外的內(nèi)存和 CPU 時(shí)間來處理?事件?和?行為?。如果你不需要這兩項(xiàng)功能,可以繼承 yii\base\Object 而不是 yii\base\Component。這樣組件可以像普通 PHP 對(duì)象一樣高效,同時(shí)還支持屬性(Property)功能。
當(dāng)繼承 yii\base\Component 或 yii\base\Object 時(shí),推薦你使用如下的編碼風(fēng)格:
$config
?作為構(gòu)造器方法最后一個(gè)參數(shù),然后把它傳遞給父類的構(gòu)造方法。init
?方法的開頭處調(diào)用了父類的?init
?方法。例子如下:
namespace yii\components\MyClass;
use yii\base\Object;
class MyClass extends Object
{
public $prop1;
public $prop2;
public function __construct($param1, $param2, $config = [])
{
// ... 配置生效前的初始化過程
parent::__construct($config);
}
public function init()
{
parent::init();
// ... 配置生效后的初始化過程
}
}
另外,為了讓組件可以在創(chuàng)建實(shí)例時(shí)能被正確配置,請(qǐng)遵照以下操作流程:
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// 方法二:
$component = \Yii::createObject([
'class' => MyClass::className(),
'prop1' => 3,
'prop2' => 4,
], [1, 2]);
補(bǔ)充:盡管調(diào)用 Yii::createObject() 的方法看起來更加復(fù)雜,但這主要因?yàn)樗屿`活強(qiáng)大,它是基于依賴注入容器實(shí)現(xiàn)的。
yii\base\Object 類執(zhí)行時(shí)的生命周期如下:
$config
?配置對(duì)象。配置的過程可能會(huì)覆蓋掉先前在構(gòu)造方法內(nèi)設(shè)置的默認(rèn)值。前三步都是在對(duì)象的構(gòu)造方法內(nèi)發(fā)生的。這意味著一旦你獲得了一個(gè)對(duì)象實(shí)例,那么它就已經(jīng)初始化就緒可供使用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: