首頁 >php框架 >YII >yii2中組件什麼意思

yii2中組件什麼意思

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-12-09 11:15:493168瀏覽

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)物件方法呼叫。

開始的三個階段都在建構函數裡實現,這意味著當你得到一個物件的實例時,它已經被初始化為適當的狀態,可以被放心的使用。

PHP中文網,有大量免費的Yii入門教學,歡迎大家學習!

以上是yii2中組件什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn