对象在PHP中也是变量的一种,所以先看PHP源码中对变量的定义:
```
#zend/zend.h
typedef union_zvalue_value{
long lval;/* long value */
double dval;/* double value */
struct{
char*val;
int len;
} str;
HashTable*ht;/* hash table value */
zend_object_value obj;
} zvalue_value;
```
zvalue_value,就是PHP底层的变量类型,zend_object_value obj就是变量中的一个结构。
在PHP5中,对象在底层的实现是采取“属性数组 + 方法数组”来实现的。如下图
![](https://box.kancloud.cn/2016-03-16_56e93de6110c6.png)
对象在PHP中是使用一种zend_object_value结构体来存储的。对象在ZEND(PHP底层引擎)中的定义如下:
```
#zend/zend.h
typedef struct_zend_object{
zend_class_entry * ce; //这里就是类入口
HashTable * properties; //属性组成的HashTable
HashTable * gruards;/* protects from __get/__set ... recursion */
} zend_object;
```
ce是存储该对象的类结构,在对象初始化时保存了类的入口,相当于类指针的作用。properties是一个HashTable,用来存放对象属性。guards用来阻止递归调用。
可以清晰认识到对象也是一种很普通的变量,不同的是其携带了对象的属性和类的入口。
- 空白目录
- 第1章 面向对象思想的核心概念
- 1.1 面向对象的“形”与“本”
- 1.1.1 对象的“形”
- 1.1.2 对象的“本质”
- 1.1.3 对象与数组
- 1.1.4 对象与类
- 1.2 魔术方法的应用
- 1.2.1 construct和destruct方法
- 1.2.2 set和get方法
- 1.2.3 call和callStatic方法
- 1.2.4 __toString方法
- 1.3 继承与多态
- 1.3.1 类的组合与继承
- 1.3.2 各种语言中的多态
- 1.4 面向接口编程
- 1.4.1 接口的作用
- 1.4.2 对接口的思考
- 1.5 反射
- 1.5.1 如何使用反射API
- 1.6 异常和错误处理
- 1.6.1 如何使用异常处理机制
- 1.6.2 怎样看PHP的异常
- 1.6.3 PHP中的错误级别
- 1.6.4 PHP中的错误处理机制
- 1.7 本章小结
- 第2章 面向对象的设计原则
- 2.1 面向对象设计的五大原则
- 2.2 一个面向对象留言本的实例
- 2.3 面向对象的思考
- 2.4 本章小结
- 第3章 正则表达式基础与应用
- 3.1 认识正则表达式
- 3.2 正则表达式中的元字符
- 3.3 正则表达式匹配规则
- 3.4 构造正则表达式
- 3.5 正则在实际开发中的应用
- 3.6 正则表达式的效率与优化
- 3.7 本章小结