/** * 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这个类。
时间: 2024-10-24 03:24:26