溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

yii2中組件是什么意思

發(fā)布時(shí)間:2021-01-13 13:57:58 來(lái)源:億速云 閱讀:142 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹yii2中組件是什么意思,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

組件是YII框架application(應(yīng)用)的主要組成部分,它是 [yii\base\Component]的實(shí)例或者子類(lèi)。組件有三個(gè)重要特征(功能):

·屬性(properties)

·事件(events)

·行為(behaviors)

單獨(dú)或者組合使用這些特征,可以讓yii框架的類(lèi)變得更加易用和可定制。舉個(gè)例子,引入一個(gè)用戶交互組件[yii\jui\DataPicker\data picker wigets],可以很輕松的在視圖中生成一個(gè)日期選擇控件(jquery ui date picker)。

use yii\jui\DatePicker;
echo DatePicker::widget([
    'language' => 'ru',
    'name'  => 'country',
    'clientOptions' => [
        'dateFormat' => 'yy-mm-dd',
    ],
]);

DatePicker掛件的屬性很容易被修改,原因就在于他繼承了類(lèi)[yii\base\Componet]

盡管組件很強(qiáng)大,但是其開(kāi)銷(xiāo)也大于普通的類(lèi)對(duì)象,原因在于組件需要額外的內(nèi)存和CPU時(shí)間去處理事件(events)和行為(behaviors).如果你的組件不需要事件和行為這兩個(gè)特征(功能),可以直接繼承[yii\base\Object],這樣你的組件在性能(效率)上和普通類(lèi)對(duì)象一致,且支持屬性(properties)。

編寫(xiě)一個(gè)繼承[yii\base\Component]或者[yii\base\Object]的類(lèi),需要遵循以下約定:

   ·假設(shè)你重寫(xiě)了構(gòu)造函數(shù),必須定義一個(gè)參數(shù)$config,作為構(gòu)造函數(shù)的最后一個(gè)參數(shù),此參數(shù)被傳遞給父類(lèi)的構(gòu)造函數(shù)使用

   ·在重寫(xiě)的構(gòu)造函數(shù)的結(jié)尾必須調(diào)用父類(lèi)的構(gòu)造函數(shù)

   ·假設(shè)你重寫(xiě)了[yii\base\Object::init()|init()]方法,那么必須在重寫(xiě)的init方法開(kāi)始調(diào)用父類(lèi)的init方法

舉個(gè)例子

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
    }
}

遵循如下示例,可使你的組件在創(chuàng)建時(shí)屬性即可被配置(初始化):

$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// alternatively
$component = \Yii::createObject([
    'class' => MyClass::className(),
    'prop1' => 3,
    'prop2' => 4,
], [1, 2]);

提示:使用[Yii::createOject()]的方式看起來(lái)更加復(fù)雜,但是因?yàn)閇Yii::createObject]是基于依賴注入的實(shí)現(xiàn),因此更加強(qiáng)大

[yii\base\Object]類(lèi)強(qiáng)制實(shí)現(xiàn)如下生命周期:

(1)在構(gòu)造函數(shù)里實(shí)現(xiàn)預(yù)初始化,可以在這個(gè)時(shí)候設(shè)定默認(rèn)的屬性值;

(2)通過(guò)$config配置對(duì)象,在構(gòu)造函數(shù)里通過(guò)對(duì)象配置可以覆蓋默認(rèn)值;

(3)在[yii\base\Object::init()|init()]方法里,進(jìn)行初始化后的配置??梢栽趇nit方法里實(shí)現(xiàn)例行檢查和屬性正?;瘷z查;

(4)對(duì)象方法調(diào)用。

開(kāi)始的三個(gè)階段都在構(gòu)造函數(shù)里實(shí)現(xiàn),這意味著當(dāng)你得到一個(gè)對(duì)象的實(shí)例時(shí),它已經(jīng)被初始化為適當(dāng)?shù)臓顟B(tài),可以被放心的使用。

以上是“yii2中組件是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI