• YII框架的行为


    一、什么是行为

    行为,也称为 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

  • 相关阅读:
    用java批量重命名文件
    登入Tomcat Manager时出现401错误——解决方法
    bat启动/停止oracle服务
    java基本类型与字符串之间的转换
    java面向对象 要点
    理解main 方法
    第二章 变量,数据类型和运算符
    初始JAVA
    jdbcTemplate
    Aspectj
  • 原文地址:https://www.cnblogs.com/buexplain/p/4858904.html
Copyright © 2020-2023  润新知