PHP教程之PHP 5.0对象模子深度探究之起步
如果你单纯是为了做网站赚钱,我想你还是别学php的好,去学ASP,JSP好了,毕竟它们有实力雄厚的公司去支持它们。 面向对象编程被设计来为大型软件项目供应处理计划,特别是多人协作的项目. 当源代码增加到一万行乃至更多的时分,每个更动都能够招致不但愿的反作用. 这类情形产生于模块间结成奥密同盟的时分,就像第一次世界大战前的欧洲。//haohappy注:喻手印块间的联系关系渡过高,互相依附性太强.更动一个模块招致其它模块也必需随着更动。
想像一下,假如有一个用来处置登录的模块答应一个信誉卡处置模块来分享它的数据库毗连. 固然起点是好的,节俭了停止另外一个数据库毗连的收入.但是有时,登录处置模块改动了个中一个变量的名字,便可能切断了二者间的协定.招致信誉卡模块的处置失足,进而招致处置发票的模块失足. 很快地,系统中一切有关的模块都能够由此失足.
因而,我感觉有点戏剧性地,绝大多半法式员都对耦合和封装心存感谢. 耦合是两个模块间依附水平的量度. 耦合越少越好.咱们但愿可以从已有的项目中抽走一个模块并在另外一个新项目中利用.
咱们也但愿在某个模块外部大范围的更动而不必忧虑对其他模块的影响. 封装的准绳可以供应这个处理计划.模块被对待成绝对自力,而且模块间的数据通讯经由过程接口来停止. 模块欠亨过彼此的变量名来窥测另外一个模块,它们经由过程函数来礼貌地发送恳求.
封装是你可以在任何编程言语中利用的一个准绳. 在PHP和很多面向进程的言语中,可以偷懒是很有引诱的.没有甚么可以禁止你经由过程模块来构建一个设想的WEB. 面向对象编程是使法式员不会违反封装准绳的一种办法.
在面向对象编程中,模块被组织成一个个对象. 这些对象具有办法和属性. 从笼统的角度来看,办法是一个对象的所做的举措,而属性是对象的特征.从编程角度来看,办法就是函数而属性是变量. 在一个幻想化的面向对象系统中,每一个部分都是一个对象. 系统由对象及对象间经由过程办法来构成的接洽组成.
一个类界说了对象的属性. 假如你在烘烤一组甜饼对象,那末类将会是甜饼机. 类的属性和办法是被挪用的成员. 人们可以经由过程说出数据成员或办法成员来表达.
每种言语供应了分歧的路子来会见对象. PHP从C++中借用概念,供应一个数据类型用来在一个标识符下包括函数和变量。最后设计PHP的时分,乃至PHP3被开辟出时,PHP其实不盘算供应开辟超越10万行代码的大型项目标才能。跟着PHP和Zend引擎的开展,开辟大型项目变得有能够,但不管你的项目范围多大,用类来书写你的剧本将可让代码完成重用。这是一个好主张,出格当你情愿与他人分享你的代码的时分。
有关对象的设法是盘算机迷信上最使人高兴的概念之一。入手下手很难把握它,但我可以包管,一旦你把握了它,用它的思惟来思虑将会十分天然。
PHP5 的对象模子
PHP5有一个单重承继的,限制会见的,可以重载的对象模子. 本章稍后会具体会商的”承继”,包括类间的父-子关系. 别的,PHP撑持对属性和办法的限制性会见. 你可以声明成员为private,不答应内部类会见. 最初,PHP答应一个子类从它的父类中重载成员.
PHP5的对象模子把对象当作与任何其它数据类型分歧,经由过程援用来传递. PHP不请求你经由过程援用(reference)显性传递和前往对象. 在本章的最初将会具体论述基于援用的对象模子. 它是PHP5中最主要的新特征.
有了更直接的对象模子,就具有了附加的优势: 效力进步, 占用内存少,而且具有更大的天真性.
在PHP的前几个版本中,剧本默许复制对象.如今PHP5只挪动句柄,需求更少的工夫. 剧本履行效力的提拔是因为防止了不用要的复制. 在对象系统带来庞杂性的同时,也带来了履行效力上的收益. 同时,削减复制意味着占用更少的内存,可以留出更多内存给其它操作,这也使效力进步.
Zand引擎2具有更大的天真性. 一个使人乐意的开展是答应析构--在对象烧毁之前履行一个类办法. 这关于使用内存也很有优点,让PHP清晰地晓得甚么时分没有对象的援用,把空出的内存分派到其它用处.
<P> 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和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
页:
[1]