• yii2框架随笔5


    /**
         * Returns a value indicating whether a property is defined for this component.
         * A property is defined if:
         *
         * - the class has a getter or setter method associated with the specified name
         *   (in this case, property name is case-insensitive);
         * - the class has a member variable with the specified name (when `$checkVars` is true);
         * - an attached behavior has a property of the given name (when `$checkBehaviors` is true).
         *
         * 与 Object 中的方法类似,只是添加了是否检测 behavior 的参数(下一篇着重介绍Object.php类)
         *
         * @param string $name the property name
         * @param boolean $checkVars whether to treat member variables as properties
         * @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component
         * @return boolean whether the property is defined
         * @see canGetProperty()
         * @see canSetProperty()
         */
        public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
        {
            // $checkVars 标记是否 check 对象的是否具有该属性(不是 getter 和 setter 定义出的属性)
            // $checkBehaviors 标记是否 check behavior 中的属性
            return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
        }
        /**
         * Returns a value indicating whether a property can be read.
         * A property can be read if:
         *
         * - the class has a getter method associated with the specified name
         *   (in this case, property name is case-insensitive);
         * - the class has a member variable with the specified name (when `$checkVars` is true);
         * - an attached behavior has a readable property of the given name (when `$checkBehaviors` is true).
         *
         * 检查对象或类是否能够获取 $name 属性
         *
         * @param string $name the property name
         * @param boolean $checkVars whether to treat member variables as properties
         * @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component
         * @return boolean whether the property can be read
         * @see canSetProperty()
         */
        public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
        {
            if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
                return true;
            } elseif ($checkBehaviors) {
                $this->ensureBehaviors();
                foreach ($this->_behaviors as $behavior) {
                    if ($behavior->canGetProperty($name, $checkVars)) {
                        // behavior 中存在名为 $name 的可读属性,就认为该对象也存在
                        return true;
                    }
                }
            }
            return false;
        }
        /**
         * Returns a value indicating whether a property can be set.
         * A property can be written if:
         *
         * - the class has a setter method associated with the specified name
         *   (in this case, property name is case-insensitive);
         * - the class has a member variable with the specified name (when `$checkVars` is true);
         * - an attached behavior has a writable property of the given name (when `$checkBehaviors` is true).
         *
         * 检查对象或类是否能够设置 $name 属性
         *
         * @param string $name the property name
         * @param boolean $checkVars whether to treat member variables as properties
         * @param boolean $checkBehaviors whether to treat behaviors' properties as properties of this component
         * @return boolean whether the property can be written
         * @see canGetProperty()
         */
        public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
        {
            if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
                return true;
            } elseif ($checkBehaviors) {
                $this->ensureBehaviors();
                foreach ($this->_behaviors as $behavior) {
                    if ($behavior->canSetProperty($name, $checkVars)) {
                        // behavior 中存在名为 $name 的可写属性,就认为该对象也存在
                        return true;
                    }
                }
            }
            return false;
        }
        /**
         * Returns a value indicating whether a method is defined.
         * A method is defined if:
         *
         * - the class has a method with the specified name
         * - an attached behavior has a method with the given name (when `$checkBehaviors` is true).
         *
         * 检查对象或类是否具有 $name 方法, $checkBehaviors 标记是否 check behavior 中的方法
         *
         * @param string $name the property name
         * @param boolean $checkBehaviors whether to treat behaviors' methods as methods of this component
         * @return boolean whether the property is defined
         */
        public function hasMethod($name, $checkBehaviors = true)
        {
            if (method_exists($this, $name)) {
                return true;
            } elseif ($checkBehaviors) {
                $this->ensureBehaviors();
                foreach ($this->_behaviors as $behavior) {
                    if ($behavior->hasMethod($name)) {
                        // behavior 中存在名为 $name 的方法,就认为该对象也存在
                        return true;
                    }
                }
            }
            return false;
        }
    /**
         * Returns a list of behaviors that this component should behave as.
         *
         * Child classes may override this method to specify the behaviors they want to behave as.
         *
         * The return value of this method should be an array of behavior objects or configurations
         * indexed by behavior names. A behavior configuration can be either a string specifying
         * the behavior class or an array of the following structure:
         *
         * ~~~
         * 'behaviorName' => [
         *     'class' => 'BehaviorClass',
         *     'property1' => 'value1',
         *     'property2' => 'value2',
         * ]
         * ~~~
         *
         * Note that a behavior class must extend from [[Behavior]]. Behavior names can be strings
         * or integers. If the former, they uniquely identify the behaviors. If the latter, the corresponding
         * behaviors are anonymous and their properties and methods will NOT be made available via the component
         * (however, the behaviors can still respond to the component's events).
         *
         * Behaviors declared in this method will be attached to the component automatically (on demand).
         *
         * 定义该对象中要用到的 behavior,格式如上
         *
         * @return array the behavior configurations.
         */
        public function behaviors()
        {
            return [];//返回一个空数组
        }
    
    
    
    
    

    因为此类继承了Object,下一篇我们着重分析一下Object.php这个类。

  • 相关阅读:
    Django的开发服务的搭建和使用
    Openerp
    Django Url设计 小知识点
    try...finally的用法
    SQL rownum的用法
    oracle 日期常用函數sysdate
    datetime.datetime.now()时间格式转化是碰到的问题
    CSS BACKGROUND汇总
    css3动画效果小结
    javascript花式理解闭包
  • 原文地址:https://www.cnblogs.com/taokai/p/5401073.html
Copyright © 2020-2023  润新知