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

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

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

?>

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAvaScript和DOM(文档对象模型)和BOM(浏览器对象模型)

DOM是针对XML但经过扩展用于HTML的应用程序编程接口DOM把整个页面映射成一个多层节点结构,HTML页面中的每一个组成部分都是某种类型的节点,这些节点也包含这不同类型的数据...
  • wang2963973852
  • wang2963973852
  • 2016年10月27日 13:58
  • 1308

JS DOM(文档对象模型)与BOM(浏览器对象模型)

在JS中,对DOM(Document Object Model)对象和BOM(Browser Object Model )对象的操作是非常重要的内容。DOM主要包括HTML文档的属性和方法,像对HTM...
  • qq_18895659
  • qq_18895659
  • 2016年06月18日 23:26
  • 791

深度探索java对象模型

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

iOS-OC对象模型

iOS-OC对象模型
  • FANYIYAO980404514
  • FANYIYAO980404514
  • 2015年04月04日 01:11
  • 831

JavaScript基础——文档对象模型(DOM)

DOM是语言中立的API,用于访问和操作HTML和XML文档。DOM1级将HTML和XML文档形象地看做一个层次化的节点数, 可以使用JavaScript来操作这个节点树,进而改变底层文档的外观和结...
  • bboyjoe
  • bboyjoe
  • 2015年11月20日 11:57
  • 705

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

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

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

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

关于js中的顶级对象模型

只是为了更深的记住,所以自己达成
  • u014209688
  • u014209688
  • 2014年04月08日 20:28
  • 1304

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

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

JavaScript基础——浏览器对象模型(BOM)

简介 ECMAScript是JavaScript的核心,但如果要在Web中使用JavaScript,那么BOM(浏览器对象模型)则无疑才是真正的核心。BOM提供了很多对象,用于访问浏览器的功能,这些功...
  • Goskalrie
  • Goskalrie
  • 2016年06月20日 16:11
  • 2809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP5的对象模型[2]--对象模型
举报原因:
原因补充:

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