面向对象是一种编程范式,它将对象作为程序的基本单元,将程序和数据封装起来,以此来提高程序的重用性、灵活性和可扩展性。
目前很多语言都支持面向对象编程,既然对象对象是一种范式,其实这就和具体的编程语言没有直接关系,只不过很多语言将这个范式作为语言的基本元素,使用C语言也能够进行面向对象编程。
面向对象的程序设计中包含:
1. 类。类是具体事物的抽象。通常类定义了事物的属性和所能完成的工作。有一点需要注意,并不是所有的面向对象编程语言的类都具有class这个明确的实体。例如Javascript就不是基于类的。Javascript中的类(Function)也具有类定义的特性。这也印证了面向对象只是一种编程范式。
1. 对象。对象是类的实例。对象是具体的。
1. 方法。方法是类定义对象可以做的事情。
1. 继承性。继承是类的具体化,子类是比具备更多特性和行为的类。面向对象是对现实世界的一个抽象。在很多时候的关系并不一定是继承关系。能在一定程序上实现代码的重用。
1. 封装性、抽象性。封装性能实现的复杂性隐藏,减少出错的可能。
从我们接触PHP开始,我们最先遇到的是函数:数组操作函数,字符串操作函数,文件操作函数等等。这些函数是我们使用PHP的基础,也是PHP自出生就支持的面向过程编程。面向过程将一个个功能封装,以一种模块化的思想解决问题。
面向对象听起来很美,但是现实中的编程语言中很少有纯粹的面向对象的语言,处于性能或者程序员的开发习惯,通常的编程语言都同时支持两种变编程方式。
PHP就是如此,从PHP4起开始支持面向对象编程。但PHP4的面向对象支持不太完善。从PHP5起,PHP引入了新的对象模型(Object Model),增加了许多新特性,包括访问控制、抽象类和final类、类方法、魔术方法、接口、对象克隆和类型提示等。并且在近期发布的PHP5.3版本中,针对面向对象编程增加了命名空间、延迟静态绑定(Late Static Binding)以及增加了两个魔术方法__callStatic()和__invoke()。
PHP中对象是按引用传递的,即对象进行赋值和操作的时候是按引用(reference)传递的,而不是整个对象的拷贝。
这一章我们从面向对象讲起,会说到PHP中的类,包括类的定义和实现、接口、抽象类以及与类相关的访问控制、对象和命名空间等。除此之外也会从其存储的内部结构,类的单继承的实现,接口的多继承,以及魔法方法的实现等细微处着手分析类相关的方方面面。
首先我们来看第一小节--类的结构和实现。
- 第一章 准备工作和背景知识
- 第一节 环境搭建
- 第二节 源码结构、阅读代码方法
- 第三节 常用代码
- 第四节 小结
- 第二章 用户代码的执行
- 第一节 生命周期和Zend引擎
- 第二节 SAPI概述
- Apache模块
- 嵌入式
- FastCGI
- 第三节 PHP脚本的执行
- 词法分析和语法分析
- opcode
- opcode处理函数查找
- 第四节 小结
- 第三章 变量及数据类型
- 第一节 变量的结构和类型
- 哈希表(HashTable)
- PHP的哈希表实现
- 链表简介
- 第二节 常量
- 第三节 预定义变量
- 第四节 静态变量
- 第五节 类型提示的实现
- 第六节 变量的生命周期
- 变量的赋值和销毁
- 变量的作用域
- global语句
- 第七节 数据类型转换
- 第八节 小结
- 第四章 函数的实现
- 第一节 函数的内部结构
- 函数的内部结构
- 函数间的转换
- 第二节 函数的定义,传参及返回值
- 函数的定义
- 函数的参数
- 函数的返回值
- 第三节 函数的调用和执行
- 第四节 匿名函数及闭包
- 第五节 小结
- 第五章 类和面向对象
- 第一节 类的结构和实现
- 第二节 类的成员变量及方法
- 第三节 访问控制的实现
- 第四节 类的继承,多态及抽象类
- 第五节 魔术方法,延迟绑定及静态成员
- 第六节 PHP保留类及特殊类
- 第七节 对象
- 第八节 命名空间
- 第九节 标准类
- 第十节 小结
- 第六章 内存管理
- 第一节 内存管理概述
- 第二节 PHP中的内存管理
- 第三节 内存使用:申请和销毁
- 第四节 垃圾回收
- 新的垃圾回收
- 第五节 内存管理中的缓存
- 第六节 写时复制(Copy On Write)
- 第七节 内存泄漏
- 第八节 小结
- 第七章 Zend虚拟机
- 第一节 Zend虚拟机概述
- 第二节 语法的实现
- 词法解析
- 语法分析
- 实现自己的语法
- 第三节 中间代码的执行
- 第四节 PHP代码的加密解密
- 第五节 小结
- 第八章 线程安全
- 第二节 线程,进程和并发
- 第三节 PHP中的线程安全
- 第九章 错误和异常处理
- 第十章 输出缓冲
- 第十六章 PHP语言特性的实现
- 第一节 循环语句
- foreach的实现
- 第二十章 怎么样系列(how to)
- 附录
- 附录A PHP及Zend API
- 附录B PHP的历史
- 附录C VLD扩展使用指南
- 附录D 怎样为PHP贡献
- 附录E phpt测试文件说明
- 附录F PHP5.4新功能升级解析
- 附录G:re2c中文手册