PHP5 面向对象程序设计

 更新时间:2008年02月13日 21:53:54   作者:  
PHP5 面向对象程序设计
PHP5有一个单重继承的,限制访问的,可以重载的对象模型. 本章稍后会详细讨论的”继承”,包含类间的父-子关系. 另外,PHP支持对属性和方法的限制性访问. 你可以声明成员为private,不允许外部类访问. 最后,PHP允许一个子类从它的父类中重载成员.

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 自动释放内存空间  

?> 

相关文章

  • 解决PHP4.0 和 PHP5.0类构造函数的兼容问题

    解决PHP4.0 和 PHP5.0类构造函数的兼容问题

    以下是对解决PHP4.0和PHP5.0类构造函数兼容问题的方法进行了详细的分析介绍,需要的朋友可以过来参考一下
    2013-08-08
  • php堆排序实现原理与应用方法

    php堆排序实现原理与应用方法

    这篇文章主要介绍了php堆排序实现原理与应用方法,较为详细的分析了堆排序的原理及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • PHP导入Excel到MySQL的方法

    PHP导入Excel到MySQL的方法

    最近在做一个系统的重构~之前它导入用户名和密码都是要手工黏贴到数据库的~所以想直接用Excel导入,方便用户操作。
    2011-04-04
  • PHP实现通过strace定位故障原因的方法

    PHP实现通过strace定位故障原因的方法

    这篇文章主要介绍了PHP实现通过strace定位故障原因的方法,结合实例形式分析了出现高负载情况下使用strace定位故障原因的相关命令与操作技巧,需要的朋友可以参考下
    2018-04-04
  • PHP简单获取上月、本月、近15天、近30天的方法示例

    PHP简单获取上月、本月、近15天、近30天的方法示例

    这篇文章主要介绍了PHP简单获取上月、本月、近15天、近30天的方法,结合实例形式分析了PHP通过自定义函数封装的日期与时间戳转换相关运算技巧,需要的朋友可以参考下
    2017-07-07
  • 深入php数据采集的详解

    深入php数据采集的详解

    本篇文章是对php数据采集进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP合并两个数组的两种方式的异同

    PHP合并两个数组的两种方式的异同

    对数组的array_merge函数和+运算符比较迷惑,写了个小程序比较下发现了他们的不同
    2012-09-09
  • 使用PHP解决http请求超时的问题

    使用PHP解决http请求超时的问题

    当进行HTTP请求时,有时候可能会遇到请求超时的情况,为了解决这个问题,本文给大家介绍了如何使用PHP解决http请求超时的问题,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • php利用smtp类实现电子邮件发送

    php利用smtp类实现电子邮件发送

    这篇文章主要介绍了php利用smtp类轻松实现发送电子邮件,smtp类发送邮件的方法其实很简单,需要的朋友可以参考下
    2015-10-10
  • 详解PHP结构型设计模式之桥接模式Bridge Pattern

    详解PHP结构型设计模式之桥接模式Bridge Pattern

    桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
    2023-04-04

最新评论