博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2 理解Object
阅读量:5941 次
发布时间:2019-06-19

本文共 1853 字,大约阅读时间需要 6 分钟。

1 版本

// yii\BaseYii\getVersionpublic 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

hasPropertycanGetPropertycanSetPropertyhasMethod

转载地址:http://bwhtx.baihongyu.com/

你可能感兴趣的文章
Java 内存模型 与 高效并发
查看>>
我的友情链接
查看>>
oracle中create table with as和insert into with as语句
查看>>
kafka连接异常
查看>>
11g废弃的Hint - BYPASS_UJVC
查看>>
为什么工业控制系统需要安全防护?
查看>>
Mongodb部署记录[3]-主从搭建
查看>>
hive sql操作
查看>>
tomcat 深度优化
查看>>
127 - "Accordian" Patience
查看>>
安卓完全退出程序的六种方法(欢迎新手学习,大手指导)
查看>>
elasticsearch 结构化搜索_在案例中实战基于range filter来进行范围过滤
查看>>
linux cp命令
查看>>
IOS 屏幕适配
查看>>
double free or corruption (fasttop)
查看>>
<HTML5与CSS3实战指南>读书笔记之一些可能会有用的东西
查看>>
我的友情链接
查看>>
解决Chrome浏览器打开虾米音乐网页播放器时的排版问题
查看>>
Javascript操作table,tr,td和表格CSS样式设置小常识
查看>>
Kafka Architecture
查看>>