本文共 1853 字,大约阅读时间需要 6 分钟。
// yii\BaseYii\getVersionpublic static function getVersion(){ return '2.0.10';}
Object实现了Configurable接口。
Configureable要求在构造函数的参数末尾加上$configpublic function __constructor($param1, $param2, ..., $config = [])
// 按照Configureable要求, 需要在参数末尾添加 $config = []public function __construct($config = []){ if (!empty($config)) { Yii::configure($this, $config); } // 调用了初始化函数 $this->init();}
// 重写了php5中预定义的__get// php5中的代码:public function __get($name){ return $this->$name; } // yii中的代码public function __get($name){ // 由原来的直接调用属性改为通过调用get函数来间接调用 $getter = 'get' . $name; if (method_exists($this, $getter)) { return $this->$getter(); } elseif (method_exists($this, 'set' . $name)) { throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name); } else { throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name); }}
同理于__set
在代码中可以看见,如果找不到$getter, 却找到了setter, 就会报出异常,这个属性不可读。用于检测类中指定的函数是否存在
__isset 用于判断某个属性是否定义了
__unset 用于将某个属性设置为null,但是对只读的属性,会报异常最好不要直接使用__isset和__unset,而是使用isset和unset
public function __isset($name){ $getter = 'get' . $name; if (method_exists($this, $getter)) { return $this->$getter() !== null; } else { return false; }}public function __unset($name){ $setter = 'set' . $name; if (method_exists($this, $setter)) { $this->$setter(null); } elseif (method_exists($this, 'get' . $name)) { throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name); }}
以下函数基本上借助于method_exists和property_exists
hasPropertycanGetPropertycanSetPropertyhasMethod
转载地址:http://bwhtx.baihongyu.com/