|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
会有很多高手的鼓励,新手的支持,慢慢你劲头就十足,有更多的信心和兴趣去学。 PHP的面向对象编程:开辟大型PHP项目标办法(五)
利用类停止数据存储
关于PHP和OOP一件十分好的工作就是,你可以很轻易地界说一个类来操作某件工作,而且不管什么时候你想
用的时分都可以挪用响应的类。假定你有一个HTML表单,用户可以经由过程选择产物ID号来选择一个产物。在数
据库中有产物的信息,你想把产物显示出来,显示它的价钱等等。你具有分歧类型的产物,而且统一个举措
能够对分歧的产物具有分歧的意思。例如,显示一个声响能够意味着播放它,然而关于其它品种的产物能够
意味着显示一个存在数据库中的图片。你可使用OOP或PHP来削减编码并进步质量:
界说一个产物的类,界说它应当有的办法(例如:显示),然后界说对每品种型的产物的类,从产物
类派后出来(SoundItem类,ViewableItem类,等等),掩盖在产物类中的办法,使它们按你的设法举措。
依据数据库中每种产物的类型(type)字段给类定名,一个典范的产物表能够有(id, type, price,
description, 等等字段)...然后在处置剧本中,你可以从数据库中掏出type值,然后实例化一个名为type
的对象:
--------------------------------------------------------------------------------
<?php
$obj=new $type();
$obj->action();
?>--------------------------------------------------------------------------------
这是PHP的一个十分好的特征,你可以不必思索对象的类型,挪用$obj的显示办法或其它的办法。利用
这个手艺,你不需求修正剧本去增添一个新类型的对象,只是增添一个处置它的类。
这个功效很壮大,只需界说办法,而不去思索一切对象的类型,在分歧的类中按分歧的办法完成它们,然后在主剧本中对恣意对象利用它们,没有if...else,也不需求两个法式员,只要乐意。
如今你赞同编程是轻易的,保护是廉价的,可重用是真的吗?
假如你办理一组法式员,分派任务就是很复杂的了,每一个人能够担任一个类型的对象和处置它的类。
可以经由过程这个手艺完成国际化,依据用户所选的言语字段使用响应的类就能够了,等等。
拷贝和克隆
当你创立一个$obj的对象时,你可以经由过程$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一
个援用),所以它具有$obj在事先的形态。有时分,你不想如许,你只是想生成一个象obj类一样的一个新
的对象,可以经由过程利用new语句来挪用类的机关函数。在PHP中也能够经由过程序列化,和一个基类来完成,但所
有的其它类都要从基类派生出来。
进入风险区域
当你序列化一个对象,你会失掉某种格局的字符串,假如你感乐趣,你可以调究它,个中,字符串中有
类的名字(太好了!),你可以把它掏出来,象:
--------------------------------------------------------------------------------
<?php
$herring=serialize($obj);
$vec=explode(':',$herring);
$nam=str_replace("\"",'',$vec[2]);
?>--------------------------------------------------------------------------------
所以假定你创立了一个"Universe"的类,而且强迫一切的类都必需从universe扩大,你可以在universe
中界说一个clone的办法,以下:
--------------------------------------------------------------------------------
<?php
class Universe {
function clone() {
$herring=serialize($this);
$vec=explode(':',$herring);
$nam=str_replace("\"",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
//然后
$obj=new Something();
//从Universe扩大
$other=$obj->clone();
?>--------------------------------------------------------------------------------
你所失掉的是一个新的Something类的对象,它同利用new办法,挪用机关函数创立出的对象一样。我不
晓得这个对你是不是有效,然而Universe类可以晓得派生类的名字是一个好的经历。想象是独一的限制。
注重:我用的是PHP4,我写的有些器材在PHP3下能够不克不及任务
我是根据自己的成长历程来写的,如有不对的还请指正。 |
|