首页 > 开发 > PHP > 正文

PHP的Yii框架中行为的定义与绑定方法讲解

2024-05-04 22:31:43
字体:
来源:转载
供稿:网友

定义行为

要定义行为,通过继承 yii/base/Behavior 或其子类来建立一个类。如:

namespace app/components;use yii/base/Behavior;class MyBehavior extends Behavior{  public $prop1;  private $_prop2;  public function getProp2()  {    return $this->_prop2;  }  public function setProp2($value)  {    $this->_prop2 = $value;  }  public function foo()  {    // ...  }}

以上代码定义了行为类 app/components/MyBehavior 并为要附加行为的组件提供了两个属性 prop1 、 prop2 和一个方法 foo()。注意属性 prop2 是通过 getter getProp2() 和 setter setProp2() 定义的。能这样用是因为 yii/base/Object 是 yii/base/Behavior 的祖先类,此祖先类支持用 getter 和 setter 方法定义属性

提示:在行为内部可以通过 yii/base/Behavior::owner 属性访问行为已附加的组件。

静态方法绑定行为

静态绑定行为,只需要重载 yii/base/Component::behaviors() 就可以了。 这个方法用于描述类所具有的行为。如何描述呢? 使用配置来描述,可以是Behavior类名,也可以是Behavior类的配置数组:

namespace app/models;use yii/db/ActiveRecord;use app/Components/MyBehavior;class User extends ActiveRecord{  public function behaviors()  {    return [      // 匿名的行为,仅直接给出行为的类名称      MyBehavior::className(),      // 名为myBehavior2的行为,也是仅给出行为的类名称      'myBehavior2' => MyBehavior::className(),      // 匿名行为,给出了MyBehavior类的配置数组      [        'class' => MyBehavior::className(),        'prop1' => 'value1',        'prop3' => 'value3',      ],      // 名为myBehavior4的行为,也是给出了MyBehavior类的配置数组      'myBehavior4' => [        'class' => MyBehavior::className(),        'prop1' => 'value1',        'prop3' => 'value3',      ]    ];  }}

还有一个静态的绑定办法,就是通过配置文件来绑定:

[  'as myBehavior2' => MyBehavior::className(),  'as myBehavior3' => [    'class' => MyBehavior::className(),    'prop1' => 'value1',    'prop3' => 'value3',  ],]

动态方法绑定行为

动态绑定行为,需要调用 yii/base/Compoent::attachBehaviors():

$Component->attachBehaviors([  'myBehavior1' => new MyBehavior, // 这是一个命名行为  MyBehavior::className(),     // 这是一个匿名行为]);

这个方法接受一个数组参数,参数的含义与上面静态绑定行为是一样一样的。

在上面的这些例子中,以数组的键作为行为的命名,而对于没有提供键名的行为,就是匿名行为。

对于命名的行为,可以调用 yii/base/Component::getBehavior() 来取得这个绑定好的行为:

$behavior = $Component->getBehavior('myBehavior2');            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表