Yii2的屬性、事件和行爲算是Yii2比較重要的一部分,特別是時間和行爲,最近看了一下Yii2的相關文檔,對事件和行爲進行了一個簡單的總結,
1、事件用於在特定的時點,觸發執行預先設定的一段代碼,需要使用到事件的類,都繼承自 yii\base\Component。
觸發事件:
class Person extends yii\base\Component;
{
}
$person = new Person;
// 使用PHP全局函數作爲handler來進行綁定
$person->on(Person::EVENT_GREET, 'person_say_hello');
// 使用對象$obj的成員函數say_hello來進行綁定
$person->on(Person::EVENT_GREET, [$obj, 'say_hello']);
// 使用類Greet的靜態成員函數say_hello進行綁定
$person->on(Person::EVENT_GREET, ['app\helper\Greet', 'say_hello']);
// 使用匿名函數
$person->on(Person::EVENT_GREET, function ($event) {
echo 'Hello';
});
//觸發事件
$person->>trigger(self::EVENT_GREET);
2、行爲用於對類的補充,通過將行爲綁定到一個類,可以使類具有行爲本身所定義的屬性和方法,就好像類本來就有這些屬性和方法一樣。 而且不需要寫一個新的類去繼承或包含現有類。
Yii中的行爲,其實是 yii\base\Behavior 類的實例, 只要將一個Behavior實例綁定到任意的 yii\base\Component 實例上, 這個Component就可以擁有該Behavior所定義的屬性和方法了。
// Step 1: 定義一個將綁定行爲的類
class MyClass extends yii\base\Component
{
// 空的
}
// Step 2: 定義一個行爲類,它將綁定到MyClass上
class MyBehavior extends yii\base\Behavior
{
// 行爲的一個屬性
public $property1 = 'This is property in MyBehavior.';
// 行爲的一個方法
public function method1()
{
return 'Method in MyBehavior is called.';
}
}
$myClass = new MyClass();
$myBehavior = new MyBehavior();
// Step 3: 將行爲綁定到類上
$myClass->attachBehavior('myBehavior', $myBehavior);
// Step 4: 接下來就能像訪問類自身的屬性和方法一樣訪問行爲中的屬性和方法
echo $myClass->property1;
echo $myClass->method1();