Yii2 理解Object

简介: 版本继承与实现构造函数 __construct__get __setmethod_exists__isset __unset其余判断函数1 版本// yii\BaseYii\getVersionpublic static function getVersion(){ return '2.0.10';}2 继

1 版本

// yii\BaseYii\getVersion
public static function getVersion()
{
    return '2.0.10';
}

2 继承与实现

Object实现了Configurable接口。
Configureable要求在构造函数的参数末尾加上$config

public function __constructor($param1, $param2, ..., $config = [])

3 构造函数 __construct

// 按照Configureable要求, 需要在参数末尾添加 $config = []
public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    // 调用了初始化函数
    $this->init();
}

4 __get, __set

// 重写了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, 就会报出异常,这个属性不可读。

5 method_exists

用于检测类中指定的函数是否存在

6 __isset, __unset

__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);
    }
}

7 其余判断函数

以下函数基本上借助于method_exists和property_exists

hasProperty
canGetProperty
canSetProperty
hasMethod
相关文章
thinkphp报错Call to undefined method app\index\controller\Index::fetch()
thinkphp报错Call to undefined method app\index\controller\Index::fetch()
143 0
|
JavaScript 前端开发
js中 object转为string
在Javascript 中,从excel中获取的数字为Object类型,可以用JSON.stringify(obj)方法将obj转为string类型。
|
测试技术 PHP
PHP:laravel自定义Model报错:$table must not be defined/$table must be string
PHP:laravel自定义Model报错:$table must not be defined/$table must be string
132 0
|
安全 前端开发 PHP
yii2.0里面的HtmlPurifier::process是干什么的?
yii2.0里面的HtmlPurifier::process是干什么的?
231 0
"2amigos/yii2-qrcode-helper": "~1.0",是干什么的?底层原理是什么?
"2amigos/yii2-qrcode-helper": "~1.0",是干什么的?底层原理是什么?
136 0
|
安全 API 开发工具
yii2.0的yii\authclient\Collection是干什么的?底层原理是什么?
yii2.0的yii\authclient\Collection是干什么的?底层原理是什么?
130 0
|
PHP
【laravel】call_user_func_array在框架的使用
【laravel】call_user_func_array在框架的使用
199 0
【laravel】call_user_func_array在框架的使用
|
PHP
【laravel】模型一对一Trying to get property 'price' of non-object
【laravel】模型一对一Trying to get property 'price' of non-object
136 0
【laravel】模型一对一Trying to get property 'price' of non-object