yii2 源码分析Behavior类分析 (四)

时间:2022-11-12 11:57:03

Behavior类是所有事件类的基类,它继承自object类

Behavior类的前面注释描述大概意思:
* Behavior类是所有事件类的基类
*
* 一个行为可以用来增强现有组件的功能,而不需要修改它的代码。
* 用来增强现有组件的功能而不修改它的代码。它可以添加自己的方法和属性组件
* 使他们可以直接通过组件访问。还可以响应组件触发的事件,拦截正常的代码执行。
class Behavior extends Object
{
/**
* 要附加行为对象的组件
*/
public $owner; /**
* 声明[[owner]]的事件处理程序.
* 子类可以重写此方法 php回调应连接 [[owner]]组件。
* 当行为被连接到owner时回调将附在[[owner]]的事件中,当行为从组件中分离时,它们将被分离
*
* 回调函数可以是以下任意格式:
*
* - 在这个行为类中的方法: `'handleClick'`, 相当于 to `[$this, 'handleClick']`
* - 类的普通方法: `[$object, 'handleClick']`
* - 类的静态方法: `['Page', 'handleClick']`
* - 匿名函数: `function ($event) { ... }`
*
* 例如:
* ```php
* [
* Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
* Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
* ]
* ```
* @return 数组事件名(数组键)和相应的事件处理方法(数组值).
*/
public function events()
{
return [];
} /**
* 绑定行为到组件
* 默认设置[[owner]]属性并将事件处理程序绑定到组件
* 如果重写方法,确保调用父类去实现
* @param 行为绑定到$owner组件
*/
public function attach($owner)
{
$this->owner = $owner;
foreach ($this->events() as $event => $handler) {
//事件绑定
$owner->on($event, is_string($handler) ? [$this, $handler] : $handler);
}
} /**
* 解除绑定的行为.
* 默认取消 owner的属性
* 将events中的事件程序解除绑定
* 如果重写方法,确保调用父类去实现
*/
public function detach()
{
if ($this->owner) {
foreach ($this->events() as $event => $handler) {
//将绑定到类上的事件解除
$this->owner->off($event, is_string($handler) ? [$this, $handler] : $handler);
}
//将 $owner 设置为 null ,解除绑定
$this->owner = null;
}
}
}