一、什么是行为
行为,也称为 mixins,可以无须改变类继承关系即可增强一个已有的类的功能。
当一个对象或类被注入某些行为后,这个对象可以像访问自己定义的方法和属性一样访问注入进来的方法和属性。
二、定义行为
要定义行为,通过继承 yiiaseBehavior 或其子类来建立一个类。如:
<?php namespace vendorBehavior; use yiiaseBehavior; /** * 定义一个服务员的点餐的行为 */ class MyBehavior extends Behavior { public $paper='paper<br/>'; //纸 private $_pen; //笔 public function getPen() { return $this->_pen; } public function setPen($value) { $this->_pen = $value; } /** * 点餐 */ public function order() { echo 'order<br/>'; } }
三、附加行为
1、静态附加上去,覆写行为要附加的组件类的 yiiaseComponent::behaviors() 方法即可。
<?php namespace vendorBehavior; use vendorBehaviorMyBehavior; use yiiaseComponent; /** * 定义一个服务员类 */ class Waiter extends Component{ public function behaviors() { return [ MyBehavior::className(), ]; } }
2、动态附加上去
$waiter->attachBehavior('MyBehavior', MyBehavior::className()); //动态附加 $waiter->detachBehavior('MyBehavior'); //动态移除
四、使用行为
<?php namespace appcontrollers; use yiiwebController; use YII; use vendorBehaviorMyBehavior; use vendorBehaviorWaiter; class TestController extends Controller { public function actionIndex() { $waiter = new Waiter; $waiter->attachBehavior('MyBehavior', MyBehavior::className()); //动态附加 $waiter->detachBehavior('MyBehavior'); //动态移除 $waiter->order(); echo $waiter->paper; $waiter->setPen('pen<br/>'); echo $waiter->getPen(); } }
五、关于更多信息
http://www.yiichina.com/doc/guide/2.0/concept-behaviors