码迷,mamicode.com
首页 > 其他好文 > 详细

yii2框架随笔4

时间:2016-04-14 22:31:13      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

接下来我们继续了解Component.php

目录为:vendor/yiisoft/yii2/base/Component.php

(接上次的代码)

   /**
     * Sets the value of a component property.
   *设置一个组件属性的值。 * This method will check in the following order and act accordingly: *这种方法将检查以下顺序并采取相应的行动: * - a property defined by a setter: set the property value
由一个setter定义的属性:设置属性值。 * - an event in the format of "on xyz": attach the handler to the event "xyz"
   一个"on xyz"格式的事件,处理程序会附加到事件"xyz". * - a behavior in the format of "as xyz": attach the behavior named as "xyz"
   一个"as xyz"格式的行为,此行为会附加到名字为"xyz"的行为后面。 * - a property of a behavior: set the behavior property value *一个行为的属性:设置行为的属性值 * Do not call this method directly as it is a PHP magic method that * will be implicitly called when executing `$component->property = $value;`.
   不要直接调用此方法,因为它是一个PHP魔术方法,当执行 $component->proerty = $value 时被调用。
* @param string $name the property name or the event name
    属性名称或事件名称为字符型 * @param mixed $value the property value
    $value为混合型 * @throws UnknownPropertyException if the property is not defined
    如果没有定义属性,抛出一个异常信息。 * @throws InvalidCallException if the property is read-only.
    如果属性为只读,抛出一个异常信息。 * @see __get()
*/ public function __set($name, $value) { $setter = set . $name; if (method_exists($this, $setter)) { //如果$setter这个方法在此类中被调用,返回true,没有返回false. // set property           $this->$setter($value);     //调用$setter方法。 return; } elseif (strncmp($name, on , 3) === 0) {//比较$name和‘on ‘前3个字符,如果前三个字符相等,即当$name 是 ‘on ‘格式的时候, // on event: attach event handler $this->on(trim(substr($name, 3)), $value);//执行on 方法,用来添加附加事件。 return; } elseif (strncmp($name, as , 3) === 0) {//比较$name和‘as ‘前3个字符,如果前三个字符相等,即当$name是 ‘as ‘格式的时候, // as behavior: attach behavior $name = trim(substr($name, 3)); $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value)); //附加行为。$name 和 $value为参数,后面为三元运算,如果$value这个对象是Behavior类的一个实例,取$value为参数,否则                                                                静态调用Yii方法创造一个新的对象。 return; } else { // behavior property $this->ensureBehaviors(); //附加一个新的事件。 foreach ($this->_behaviors as $behavior) { if ($behavior->canSetProperty($name)) {//如果参数返回为真,$behavior->$name = $value,定义属性。 $behavior->$name = $value; return; } } } if (method_exists($this, get . $name)) { //如果‘get‘.$name这个方法属于这个类,那么就抛出一个信息"设置只读属性". throw new InvalidCallException(Setting read-only property: . get_class($this) . :: . $name); } else {                     //如果不属于这个类,就抛出一个信息"设置未知属性".
throw new UnknownPropertyException(Setting unknown property:  . get_class($this) . :: . $name);
        }
    }

    /**
     * Checks if a property is set, i.e. defined and not null.
    检查属性设置,即定义,not null。
* This method will check in the following order and act accordingly: * 这种方法将检查以下顺序并采取相应的行动:
* - a property defined by a setter: return whether the property is set
   通过一个setter定义的属性:返回属性是否设置
* - a property of a behavior: return whether the property is set
   一个行为的属性:返回属性是否设置 * - return `false` for non existing properties * 对于非现有的属性返回false. * Do not call this method directly as it is a PHP magic method that * will be implicitly called when executing `isset($component->property)`.
   不要直接调用此方法,因为它是一个PHP魔术方法,当执行isset($component->property)时此魔术方法会被调用。

* @param string $name the property name or the event name * @return boolean whether the named property is set
    属性是否被设置返回boolean值。 * @see
http://php.net/manual/en/function.isset.php */ public function __isset($name) { $getter = get . $name; if (method_exists($this, $getter)) { //如果$getter方法不存在此类当中,返回这个方法,使他不为null. return $this->$getter() !== null; } else { // behavior property $this->ensureBehaviors(); //否则附加一个时间。 foreach ($this->_behaviors as $behavior) {//遍历行为,如果此方法返回为真,返回这个属性使他不为null. if ($behavior->canGetProperty($name)) { return $behavior->$name !== null; } } } return false; } /** * Sets a component property to be null.
   设置一个组件的属性为null。
* This method will check in the following order and act accordingly: *这种方法将检查以下顺序并采取相应的行动: * - a property defined by a setter: set the property value to be null
   通过一个setter定义的属性:属性值设置为空
* - a property of a behavior: set the property value to be null *一个行为的属性:属性值设置为空
* Do not call this method directly as it is a PHP magic method that * will be implicitly called when executing `unset($component->property)`.
   不要直接调用此方法,因为它是一个PHP魔术方法,当执行‘unset($component->property)‘时此魔术方法会被调用。
* @param string $name the property name * @throws InvalidCallException if the property is read only.//如果这个属性为只读的话抛出一个信息。 * @see
http://php.net/manual/en/function.unset.php */ public function __unset($name) { $setter = set . $name; if (method_exists($this, $setter)) { //如果$setter方法存在这个类里面的话,执行$this->$setter(null)方法。 $this->$setter(null); return; } else { // behavior property $this->ensureBehaviors(); //附加事件 foreach ($this->_behaviors as $behavior) { if ($behavior->canSetProperty($name)) {//遍历行为事件,如果为真的话,使$behavior->$name = null.返回。 $behavior->$name = null; return; } } } throw new InvalidCallException(Unsetting an unknown or read-only property: . get_class($this) . :: . $name);//否则抛出信息"重置一个未知的或只读属性". } /** * Calls the named method which is not a class method. *调用方法名,不是一个类的方法。 * This method will check if any attached behavior has * the named method and will execute it if available.

    //此方法将检查是否有附加的行为有
        命名方法(如果可用)将执行它。


     * Do not call this method directly as it is a PHP magic method that
     * will be implicitly called when an unknown method is being invoked.
   //不要直接调用此方法,因为他是一个PHP魔术方法,当一个未知方法执行时此魔术方法会被调用。
     * @param string $name the method name
     * @param array $params method parameters
     * @return mixed the method return value
     * @throws UnknownMethodException when calling unknown method
     */
    public function __call($name, $params)
    {
        $this->ensureBehaviors();//附加事件
        foreach ($this->_behaviors as $object) {
            if ($object->hasMethod($name)) {
                return call_user_func_array([$object, $name], $params);//用一个数组作为参数调用一个回调函数,返回值为回调函数执行的结果或者为false。
            }
        }
        throw new UnknownMethodException(Calling unknown method:  . get_class($this) . "::$name()"); //抛出一个信息,调用未知方法.
    }

    /**
     * This method is called after the object is created by cloning an existing one.
     * It removes all behaviors because they are attached to the old object.
     */
   通过克隆现有创建的对象后,此方法会被调用。
   他将会消除所有的行为因为它连接到了旧对象。
    public function __clone()
    {
        $this->_events = []; //事件为空数组。
        $this->_behaviors = null;//行为为null.
    }

    /**
     * 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
*该类具有与指定名称关联的getter或setter方法 * (in this case, property name is case-insensitive);
   *(在这种情况下,属性名称不区分大小写); * - the class has a member variable with the specified name (when `$checkVars` is true);
   *该类具有指定名称的成员变量(当`$ checkVars`为true) * - an attached behavior has a property of the given name (when `$checkBehaviors` is true). *一个附加行为具有给定的名称的属性(当`$checkBehaviors`为true)。 * @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) { return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);

 

yii2框架随笔4

标签:

原文地址:http://www.cnblogs.com/taokai/p/5392877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!