• yii2 源码分析Behavior类分析 (四)


    Behavior类是所有事件类的基类,它继承自object类

    Behavior类的前面注释描述大概意思:
    * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要修改它的代码。 * 用来增强现有组件的功能而不修改它的代码。它可以添加自己的方法和属性组件 * 使他们可以直接通过组件访问。还可以响应组件触发的事件,拦截正常的代码执行。
    class Behavior extends Object
    {
        /**
         * 要附加行为对象的组件
         */
        public $owner;
    
    
        /**
         * 声明[[owner]]的事件处理程序.
         * 子类可以重写此方法 php回调应连接 [[owner]]组件。
         * 当行为被连接到owner时回调将附在[[owner]]的事件中,当行为从组件中分离时,它们将被分离
         *
         * 回调函数可以是以下任意格式:
         *
         * - 在这个行为类中的方法: `'handleClick'`, 相当于 to `[$this, 'handleClick']`
         * - 类的普通方法: `[$object, 'handleClick']`
         * - 类的静态方法: `['Page', 'handleClick']`
         * - 匿名函数: `function ($event) { ... }`
         *
         * 例如:
         * ```php
         * [
         *     Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
         *     Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
         * ]
         * ```
         * @return 数组事件名(数组键)和相应的事件处理方法(数组值).
         */
        public function events()
        {
            return [];
        }
    
        /**
         * 绑定行为到组件
         * 默认设置[[owner]]属性并将事件处理程序绑定到组件
         * 如果重写方法,确保调用父类去实现
         * @param 行为绑定到$owner组件
         */
        public function attach($owner)
        {
            $this->owner = $owner;
            foreach ($this->events() as $event => $handler) {
                //事件绑定
                $owner->on($event, is_string($handler) ? [$this, $handler] : $handler);
            }
        }
    
        /**
         * 解除绑定的行为.
         * 默认取消 owner的属性
         * 将events中的事件程序解除绑定
         * 如果重写方法,确保调用父类去实现
         */
        public function detach()
        {
            if ($this->owner) {
                foreach ($this->events() as $event => $handler) {
                    //将绑定到类上的事件解除
                    $this->owner->off($event, is_string($handler) ? [$this, $handler] : $handler);
                }
                //将 $owner 设置为 null ,解除绑定
                $this->owner = null;
            }
        }
    }
    

      

  • 相关阅读:
    Servlet_note
    J2SE学习历程
    ASP.NET Core搭建多层网站架构【0-前言】
    使用oh-my-posh美化powershell
    Linux使用整理
    Ubuntu18.04国内源安装MySQL8.0
    Visual Studio Code 个人配置备份
    ASP.NET Core搭建多层网站架构【15-扩展之使用Obfuscar混淆加密保护代码】
    ASP.NET Core搭建多层网站架构【14-扩展之部署到IIS】
    ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】
  • 原文地址:https://www.cnblogs.com/liuwanqiu/p/6740014.html
Copyright © 2020-2023  润新知