YII框架的行为

一、什么是行为

行为,也称为 mixins,可以无须改变类继承关系即可增强一个已有的类的功能。

当一个对象或类被注入某些行为后,这个对象可以像访问自己定义的方法和属性一样访问注入进来的方法和属性。

二、定义行为

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

<?php
namespace vendor\Behavior;

use yii\base\Behavior;
/**
 * 定义一个服务员的点餐的行为
 */
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、静态附加上去,覆写行为要附加的组件类的 yii\base\Component::behaviors() 方法即可。

<?php
namespace vendor\Behavior;
use vendor\Behavior\MyBehavior;
use yii\base\Component;
/**
 * 定义一个服务员类
 */
class Waiter extends Component{
    public function behaviors() {
        return [
            MyBehavior::className(),
        ];
    }
}

 

2、动态附加上去

$waiter->attachBehavior('MyBehavior', MyBehavior::className()); //动态附加
$waiter->detachBehavior('MyBehavior'); //动态移除

 四、使用行为

<?php
namespace app\controllers;
use yii\web\Controller; 
use \YII;
use vendor\Behavior\MyBehavior;
use vendor\Behavior\Waiter;

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

posted @ 2015-10-07 16:38  扬空  阅读(247)  评论(0编辑  收藏  举报