在PHP开发中养成7个面向对象的好习惯_第1页
在PHP开发中养成7个面向对象的好习惯_第2页
在PHP开发中养成7个面向对象的好习惯_第3页
在PHP开发中养成7个面向对象的好习惯_第4页
在PHP开发中养成7个面向对象的好习惯_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如果不打算使用OO原则创建应用程序,请使用PHP的面向对象语言特性(OO )。 这七种习惯有助于在进程编程和OO编程之间开始转换。在PHP编程初期,PHP代码本质上仅限于面向流程的。 进程代码的特征是使用该进程来构建应用程序块. 过程通过允许过程之间的调用,提供了一定程度的重用。然而,没有面向对象的语言结构,程序员仍然能够将OO特性引入到PHP代码中。 这个有点难,代码很难读。 因为这是混合样本(包含伪OO设计的过程语言)。 使用PHP代码的OO结构,可以更轻松地根据优秀的OO实践构建代码,如可以定义类并使用类,可以构建使用继承的类之间的关系,以及定义接口等。虽然模块化的纯流程设计工作不太好,

2、但OO设计的优点体现在维护上。 因为常用应用程序的大部分生命周期都花在维护上,所以代码维护是应用程序生命周期的重要部分。 开发过程中容易忘记代码维护。 如果在应用程序开发和部署上存在竞争,长期的可维护性可能处于相对次要的地位。模块化:优秀OO设计的主要特征之一。 帮助进行这样的维护。 模块化有助于封装更改,使应用程序的扩展和更改随着时间的推移变得容易。总而言之,构筑OO软件的习惯有7个以上,但是通过遵循这里的7个习惯,可以使代码与基本的OO设计标准一致。 提供更牢固的基础,在此基础上确立Poo的习惯,构建容易维护和扩展的软件。 这些习惯对应了几个模块化的主要特性。 有关独立于语言的OO设计优点

3、的详细信息,请参见参考资料。七个优秀的PHP OO习惯如下:保持谦虚。成为好邻居。请不要看梅杜莎。利用最弱的链接。你是橡皮我是胶水。限制传播。考虑使用模式。保持谦虚保持谦虚意味着不把自己暴露在班级的实现和函数的实现上。 隐藏信息是基本习惯。 如果不养成隐藏细节的习惯,就很难养成其他的习惯。 信息隐藏也称为包。直接公开公共领域有很多坏习惯的原因,最重要的理由是没有实施变更的选择。 使用OO的概念来隔离变更,封装在保证本质上不是病毒性(viral )的变更中起着不可或缺的作用。 病毒性的变更是最初的微小变更。 例如,将包含三个元素的数组更改为仅包含两个元素的数组。 突然发现为了应对非常细微的更改,

4、更改代码的必要在增加。隐藏信息的简单方法之一,就像房子的窗户一样,把区域作为私有,通过公共访问公开。 只打开一扇、两扇窗户,而不是整面墙向外开放(我将在“好习惯:使用公共访问方法”中详细介绍访问方法)。不仅允许在实现更改后隐藏,而且可以使用公共访问方法而不是公共字段,基于基本的实现来构建。 此方法复盖访问方法的实现,并执行与父代稍有不同的行为。 您还可以构建抽象实现,并将实现委托给复盖基本实现的类。坏习惯:公开公共场地在清单1中的错误代码示例中,人员对象的字段直接作为公共字段公开,而不是访问方法。 这个行为很有魅力,特别是在轻量级的数据对象上特别有魅力,但有限制。清单1 .公开公共领域的坏习惯

5、什么php类人力资源举止公共$前缀;公共$ given name;公共$ family name;公共$ suffix;以下$person=new Person ();个人前缀= Mr.;$个人名字= John ;echo($person-prefix )echo ($个人名字)什么?如果对象有变化,则使用该对象的所有代码也必须更改。 例如,如果某人的教名、姓和其他名称封装在PersonName对象中,则必须修改所有代码以适应更改。好习惯:使用公共访问方法通过使用优秀的OO习惯(参见清单2 ),同一对象现在拥有私有字段而不是公共字段,并且通过称为访问方法的get和set公共方法小心地向外部公开

6、私有字段。 这些访问方法现在提供了从PHP类中检索信息的通用方法。 这可能减少在实现发生变化时对使用类的所有代码的更改。清单2 .使用公共访问方法的好习惯什么php类人力资源举止私有$ prefix;私有$ given name;私有$ family name;私有$ suffix;公共函数集前缀($ prefix )举止$this-prefix=$prefix;以下公共函数获取前缀(),)。举止返回$ this-prefix;以下公共函数集given name ($ gn )举止$this-givenName=$gn;以下公共函数获取given name ()举止返回$ this-given

7、 name;以下publicfunctionsetfamilyname ($ fn )举止$this-familyName=$fn;以下公共函数获取族名称()。)举止返回$ this-family name;以下publicfunctionsetssuffix ($ suffix )举止$this-suffix=$suffix;以下公共功能获得suffix ()举止返回$ suffix;以下以下$person=new Person ();个人设置前缀( Mr. );$person-setGivenName(John );echo($person-getPrefix ();echo ($ per

8、son-given name ();什么?乍一看,这个代码可能完成很多工作,实际上在前端的工作可能很多。 但是,在许多情况下,使用优秀的OO习惯从长期来看是非常有成本效益的,这将大大巩固未来的变化。清单3所示的代码版本修改了内部实现以使用名称部件的关联数组。 理想情况下,我想有错误处理,更慎重地检查元素是否存在,但本例的目的是显示类的代码不需要更改的程度。 代码不知道类的更改。 记住采用OO习惯的理由,应该慎重地封装更改,以使代码更可扩展,维护更容易。清单3 .使用不同内部实现的另一个示例什么php类人力资源举止个人名称=array ();公共函数集前缀($ prefix )举止$ this

9、-人员名称 prefix =$ prefix;以下公共函数获取前缀(),)。举止返回$ this -人员名称前缀;以下公共函数集given name ($ gn )举止$ this -个人名称 given name =$ gn;以下公共函数获取given name ()举止返回$ this -个人名称 given name ;以下/* etc. */以下/* eventhoughtheinternalimplementchanged,the code here stays exactly*只被变更为同一人班*/$person=new Person ();个人设置前缀( Mr. );$perso

10、n-setGivenName(John );echo($person-getPrefix ();echo ($ person-given name ();什么?成为好邻居构建类时,必须正确处理自己的错误。 如果类不知道如何处理错误,则必须以调用方理解的格式封装错误。 此外,请避免返回空对象或处于无效状态的对象。 在很多情况下,只要验证参数并抛出特定的异常,就能提供参数无效的理由。 养成这个习惯可以和管理代码和对象的人节省时间。坏习惯:不处理错误考虑清单4所示的例子。 此示例接受几个参数,并返回输入了几个值的Person对象。 但是,parsePersonName ()方法未验证给定的$val变

11、量是否为空、长度为零的字符串,或者字符串是否使用不可分析的格式。 parsePersonName ()方法不返回Person对象,但返回null。 使用此方法的管理员和程序员至少需要设置一个中断点并调试PHP脚本。清单4 .不抛出或处理错误的习惯类人员实用程序举止publicaticationfunctionparsepersonname ($ format,$val )举止PS (,$val) 0) )$person=new Person ();$parts=split (, $val ); /Assume the value is last,first$个人集合名称($ parts 1 )

12、;个人系列名称($ parts 0 );以下返回$人员;以下以下列表4中的parsePersonName ()方法可以修改为在if条件外部初始化Person对象,以便始终检索有效的Person对象。 虽然得到了没有set属性的个人,但这仍然不能改善困境。好习惯:每个模块处理自己的错误请事先验证参数,而不要让调用方推测。 如果未设置的变量无法生成有效结果,则检查变量并抛出InvalidArgumentException。 如果字符串不能为空或必须为特定格式,则检查格式并抛出异常。 清单5说明了如何在parsePerson ()方法中创建异常和一些新条件,这些方法显示了一些基本验证。清单5 .抛出

13、错误的习惯什么PSclassinvalidationprodusennameformatexceptionextendsonlogicexception class个人实用程序举止publicaticationfunctionparsepersonname ($ format,$val )举止PK (! $format) thrownewinvalidpersonnameformatexception ( invalidpersonnameformat. );以下PK (! isset ($ val )|strlen ($ val )=0)thrownewinvalidargumentexce

14、ption ( mussupplicanon-nulvaluetosparse. );以下以下以下什么?最终的目的是不理解其工作原理也能利用班级。 如果他们使用错误的方法,或者不用意图的方法,就没有必要推测不能工作的原因。 作为一个好邻居,你必须知道重用你班的人没有特别的功能。 因此,有必要解决推测的问题。回到首位别看梅杜萨我第一次理解OO的概念时,就怀疑接口是否真的有用。 我同事给我打了个比喻,说不使用接口,就像看到梅杜莎的头一样。 在希腊神话中,美杜莎是一个长着蛇发的女怪。 看了她一眼的人都会变成石头。 杀了美杜莎的珀尔修斯在盾牌上观察她的影子,能避免变成石头和她对抗。接口是应对梅杜莎的镜子。 如果使用特定实现,还需要根据实现代码的更改来更改代码。 直接使用实现会限制选择,因为类本质上是“石头”。坏习惯:不使用界面清单6显示了从数据库中读取人员对象的示例。 获取用户的名称,并返回数据库中的匹配人员对象。清单6 .不使用接口的坏习惯什么PS等级dbpersonprovider举止publicfunctiongetperson ($ given name,$familyName )举止/* go to the数据库,get the个人

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论