Yii2.0行为Behavior的理解
4,行为不需要修改类,继承需要
理论比较是理论,实践才是最重要的,我们尝试使用Behavior
namespace app\behavior; use yii\base\Behavior; class myBehavior extends Behavior { public $prop; public function events() { return parent::events(); } public function foo() { return "这里Behavior扩展的新功能"; } }
在其他类中
public function actionBind() { $article = new Article(); $article->attachBehavior('myBehavior',new myBehavior()); $rs = $article->foo(); var_dump($rs); }
发现这个方法已经被扩展到这个对象中$article中了
class Article extends ActiveRecord { const MY_EVENT = 'my_event'; public function behaviors() { return [ // 匿名行为,只有行为类名 myBehavior::className(), // 匿名行为,配置数组 [ 'class' => myBehavior::className(), 'prop' => 'value', ], // 命名行为,只有行为类名 'myBehavior2' => myBehavior::className(), // 命名行为,配置数组 'myBehavior3' => [ 'class' => myBehavior::className(), 'prop' => 'value', ] ]; }
测试扩充
public function actionBind() { $article = new Article(); $article->attachBehavior('myBehavior',new myBehavior()); $article->attachBehavior('myBehavior2',myBehavior::className()); $article->attachBehavior('myBehavior4', [ 'class' => MyBehavior::className(), 'prop' => 'value', ]); $rs = $article->foo(); var_dump($rs); }
上诉展示了几种不同的扩充方式,其实Behavior最大的用处还是在不修改原有代码的基础上扩展功能,实际开发中用的不是太多;主要还是理解Behavior的功能