PHP5的对象模型[2]--对象模型

原创 2004年08月07日 23:48:00

PHP5 的对象模型

PHP5有一个单重继承的,限制访问的,可以重载的对象模型. 本章稍后会详细讨论的”继承”,包含类间的父-子关系. 另外,PHP支持对属性和方法的限制性访问. 你可以声明成员为private,不允许外部类访问. 最后,PHP允许一个子类从它的父类中重载成员.

PHP5的对象模型把对象看成与任何其它数据类型不同,通过引用来传递. PHP不要求你通过引用(reference)显性传递和返回对象. 在本章的最后将会详细阐述基于引用的对象模型. 它是PHP5中最重要的新特性.

有了更直接的对象模型,就拥有了附加的优势: 效率提高, 占用内存少,并且具有更大的灵活性.

在PHP的前几个版本中,脚本默认复制对象.现在PHP5只移动句柄,需要更少的时间. 脚本执行效率的提升是由于避免了不必要的复制. 在对象体系带来复杂性的同时,也带来了执行效率上的收益. 同时,减少复制意味着占用更少的内存,可以留出更多内存给其它操作,这也使效率提高.

Zand引擎2具有更大的灵活性. 一个令人高兴的发展是允许析构--在对象销毁之前执行一个类方法. 这对于利用内存也很有好处,让PHP清楚地知道什么时候没有对象的引用,把空出的内存分配到其它用途.

补充:

PHP5的内存管理

对象传递<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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

?>

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haohappy2004/article/details/68256

PHP数据对象模型(PDO)

虽然在php中有很多种数据库系统的扩展,但是不同的数据库系统对应的函数又是不同的,就拿MYSQL数据库系统而言,PHP就提供了Mysql和,Mysqli两种扩展,有没有一组统一的扩展标准来使不同的数据...
  • qq_32080545
  • qq_32080545
  • 2016-07-07 21:16:44
  • 612

《PHP5的对象模型》

  • 2008年12月06日 10:12
  • 76KB
  • 下载

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是...
  • beyongwang
  • beyongwang
  • 2016-08-21 21:14:18
  • 880

《深入理解C++对象模型》读书笔记(一)

1、           C++类对象模型的中包括非静态成员变量和虚函数表指针,其他静态成员变量和成员函数均放在对象模型之外,所有的对象示例均可以共同使用。如此可以节省访问的时间和空间效率。   ...
  • zhiren2011
  • zhiren2011
  • 2015-07-31 10:49:21
  • 1247

OMT 对象模型、动态模型和功能模型

对象模型描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。对象模型表示静态的、结构上的、系统的“数据"特征。对象模型为动态模型和功能模型提供了基本的框架,对象模型用包含对象和类的对象图...
  • hanghang121
  • hanghang121
  • 2015-09-09 17:01:01
  • 1294

POM 项目对象模型

POM Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象。这些对象通过一个名为项目对象模型(Project Object Model,POM)的XML文件描述。 POM包含四类...
  • wb121010
  • wb121010
  • 2015-01-19 09:12:29
  • 1676

建立对象模型即使用UML画类图

UML类图画法及其之间的几种关系 最近复习软件工程的考试,大题需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多, 上百度进行搜索,发现了一篇学习笔记,整理总结的不错哦 自我总结: ...
  • hy_711
  • hy_711
  • 2017-06-04 12:37:01
  • 1216

Thinking in UML 学习笔记(一)——建立对象模型

一、面向对象的本质面向对象的本质是抽象,当系统达到了超越其处理能力的程度,我们可以抽象出我们能够处理的范围来提成抽象级别,这样就可以构建更大、更复杂的系统。现实世界和对象世界之间存在着一道沟壑,这道沟...
  • lxq_xsyu
  • lxq_xsyu
  • 2014-04-29 15:01:33
  • 2685

深度探索java对象模型

一、java中, http://www.open-open.com/lib/view/open1382151494993.html 
  • Manketon
  • Manketon
  • 2014-10-20 21:46:41
  • 1699

建立对象模型方法

   在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型即包括自底向上的抽象过程,也包括自顶向下的分解过程   1.自底向上的抽象    建立对象模型的第一步是从问题领域的陈述...
  • xuzhongnangs
  • xuzhongnangs
  • 2010-04-07 19:45:00
  • 3402
收藏助手
不良信息举报
您举报文章:PHP5的对象模型[2]--对象模型
举报原因:
原因补充:

(最多只允许输入30个字)