PHP5 面向对象程序设计
2015-01-24信息快讯网
PHP5的对象模型把对象看成与任何其它数据类型不同,通过引用来传递. PHP不要求你通过引用(reference)显性传递和返回对象. 在本章的最后将会详细阐述基于引用的对象模型. 它是PHP5中最重要的新特性.
有了更直接的对象模型,就拥有了附加的优势: 效率提高, 占用内存少,并且具有更大的灵活性.
在PHP的前几个版本中,脚本默认复制对象.现在PHP5只移动句柄,需要更少的时间. 脚本执行效率的提升是由于避免了不必要的复制. 在对象体系带来复杂性的同时,也带来了执行效率上的收益. 同时,减少复制意味着占用更少的内存,可以留出更多内存给其它操作,这也使效率提高.
Zand引擎2具有更大的灵活性. 一个令人高兴的发展是允许析构--在对象销毁之前执行一个类方法. 这对于利用内存也很有好处,让PHP清楚地知道什么时候没有对象的引用,把空出的内存分配到其它用途.
补充:
PHP5的内存管理
对象传递
PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval中(在PHP4中对象和一般变量一样存储于Zval)。在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给一个函数时,我们不需要复制数据。仅仅保持相同的对象指针并由另一个zval通知现在这个特定的对象指向的Object Store。由于对象本身位于Object Store,我们对它所作的任何改变将影响到所有持有该对象指针的zval结构----表现在程序中就是目标对象的任何改变都会影响到源对象。.这使PHP对象看起来就像总是通过引用(reference)来传递,因此PHP中对象默认为通过“引用”传递,你不再需要像在PHP4中那样使用&来声明。
垃圾回收机制
某些语言,最典型的如C,需要你显式地要求分配内存当你创建数据结构。一旦你分配到内存,就可以在变量中存储信息。同时你也需要在结束使用变量时释放内存,这使机器可以空出内存给其它变量,避免耗光内存。
PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
例如:
<?php class Person{ } function sendEmailTo(){ } $haohappy = new Person( ); // 建立一个新对象: 引用计数 Reference count = 1 $haohappy2 = $haohappy; // 通过引用复制: Reference count = 2 unset($haohappy); // 删除一个引用: Reference count = 1 sendEmailTo($haohappy2); // 通过引用传递对象: // 在函数执行期间: // Reference count = 2 // 执行结束后: // Reference count = 1 unset($haohappy2); // 删除引用: Reference count = 0 自动释放内存空间 ?>
PHP采集相关教程之一 CURL函数库
php 数组的合并、拆分、区别取值函数集
提高PHP编程效率 引入缓存机制提升性能
一步一步学习PHP(4) php 函数 补充2
一步一步学习PHP(3) php 函数
在PHP中养成7个面向对象的好习惯
基于Windows下Apache PHP5.3.1安装教程
PHP5.3.1 不再支持ISAPI
php5 图片验证码实现代码
PHP5 面向对象(学习记录)
PHP 面向对象实现代码
php面向对象全攻略 (十七) 自动加载类
php面向对象全攻略 (十六) 对象的串行化
php面向对象全攻略 (十四) php5接口技术
PHP4与PHP5的时间格式问题
Dedecms常用函数解析
PHP 5.0创建图形的实用方法完整篇第1/3页
用php实现批量查询清除一句话后门的代码
asp和php下textarea提交大量数据发生丢失的解决方法
php开发工具之vs2005图解
支持php4、php5的mysql数据库操作类
PHP4和PHP5性能测试和对比 测试代码与环境
PHP5.2下chunk_split()函数整数溢出漏洞 分析
不错的PHP学习之php4与php5之间会穿梭一点点感悟
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
不错的一篇面向对象的PHP开发模式(简写版)
PHP面向对象编程快速入门
php基础知识:类与对象(5) static
php基础知识:类与对象(4) 范围解析操作符(::)
php基础知识:类与对象(3) 构造函数和析构函数