YII2.0框架行为(Behavior)深入详解(2)

  • yii\base\Component 派生自己的类,以便使用行为;
  • yii\base\Behavior 派生自己的行为类,里面定义行为涉及到的属性、方法;
  • 将Component和Behavior绑定起来;
  • 像使用Component自身的属性和方法一样,尽情使用行为中定义的属性和方法。

行为的要素

我们提到了行为只是 yii\base\Behavior 类的实例。 那么这个类究竟有什么秘密呢?其实说破了也没有什么的他只是一个简单的封装而已,非常的简单:

class Behavior extends Object
{
 // 指向行为本身所绑定的Component对象
 public $owner;
 // Behavior 基类本身没用,主要是子类使用,重载这个函数返回一个数组表
 // 示行为所关联的事件
 public function events()
 {
  return [];
 }
 // 绑定行为到 $owner
 public function attach($owner)
 {
  ... ...
 }
 // 解除绑定
 public function detach()
 {
  ... ...
 }
}

这就是Behavior的全部代码了,是不是很简单?Behavior类的要素的确很简单:

  • $owner 成员变量,用于指向行为的依附对象;
  • events() 用于表示行为所有要响应的事件;
  • attach() 用于将行为与Component绑定起来;
  • deatch() 用于将行为从Component上解除。

下面分别进行讲解。

行为的依附对象

yii\base\Behavior::$owner 指向的是Behavior实例本身所依附的对象。这是行为中引用所依附对象的唯一手段了。 通过这个 $owner ,行为才能访问所依附的Component,才能将本身的方法作为事件handler绑定到Component上。

$owner 由 yii\base\Behavior::attach() 进行赋值。 也就是在将行为绑定到某个Component时, $owner 就已经名花有主了。 一般情况下,不需要你自己手动去指定 $owner 的值, 在调用 yii\base\Componet::attachBehavior() 将行为与对象绑定时, Component会自动地将 $this 作为参数,调用 yii\base\Behavior::attach()

有一点需要格外注意,由于行为从本质来讲是一个PHP类,其方法就是类方法,就是成员函数。 所以,在行为的方法中, $this 引用的是行为本身, 试图通过 $this 来访问行为所依附的Component是行不通的。 正确的方法是通过 yii\base\Behavior::$owner 来访问Component。

行为所要响应的事件

行为与事件结合后,可以在不对类作修改的情况下,补充类在事件触发后的各种不同反应。 为此,只需要重载yii\base\Behavior::events() 方法,表示这个行为将对类的何种事件进行何种反馈即可:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5482.html