PHP核心技术与最佳实践——总结

第一章    面向对象思想的核心概念

    面向对象程序设计是一种以提高软件的重用性、灵活性、和可扩展性的程序设计范型(或者说程序开发方法)。何以使软件可重用、灵活、可扩展呢?因为面向对象的核心思想是对象、封装、可重用性和可扩展性。面向对象通常与C++、JAVA挂钩,但正如书上说的,面向对象和具体的语言无关,PHP也可以写出很好的面向对象风格的代码。

    1.1    面向对象的“形”与“本”

    类是对象的抽象组织,对象是类的具体存在。面向对象的“形”与“本”主要以PHP为例给读者介绍了面向对象是怎么样的以及底层是怎么实现的,同时也介绍了类与对象的关系。类与对象属于从属关系,比如书中所用到的例子,马是一个类,白马是马这个类的一个对象。

    介绍完对象的“形”与“本”,作者通过序列化的方式对比对象和数组,通过简单的数组概念让读者更好的认识对象,两者在内容上是一模一样的,只是对象还多了个指针,指向它所属的类。

    类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理;

    对象就是数据,对象本身不包含方法,但是对象有一个“指针”指向一个类,这个类里可以有方法;

    方法描述不同属性所导致的不同表现;

    类和对象是不可分割的,有对象就必定有一个类和其对应,否则这个对象也就成了没有亲人的孩子。

    个人的理解,类是描述一个具有相同属性、操作的大范围,在这个范围下有一个或多个具有相同属性但属性值不同的实体。就像游戏中(拿2K为例),所有运动员都具有关于篮球的一些属性和动作,这些属性和动作的集合就是类,而每个球员的这些属性值又微有不同,每个球员便是对象。

    1.2    魔术方法的应用

    所谓魔术方法,其实就是一些自动加载的方法,它给程序员提供了更实用的编程方法或一些技巧性的用法,有益于更好的编码风格,也别看做是PHP的“语法糖”。作者通过介绍get、set、call、callStatic等常用的魔术方法,说明了其对PHP的作业,同时也通过与Java的比较,阐述了两种语言的重载和魔术方法的不同。总的来说,魔术方法可提高PHP程序的健壮性,同时PHP由于有了set/get这一对魔术方法,使得动态增加对象的属性字段变得非常方便,这提现了动态语言的优势,简单、灵活。

    1.3    继承与多态

    该小节作者通过多个例子阐述了继承与组合的区别于联系。在继承里,子类拥有父类的方法和属性,同时子类也可以有自己的方法和属性。在PHP里使用“:”运算符调用父类的方法,同时“:”操作符也用来作为类常量和静态方法的调用。

    组合与继承都是提高代码可重用性的手段,继承是一种“是、像”的关系,而组合是一种“需要”的关系,组合偏重整体与局部的关系,而继承偏重父与子的关系。现代的面向对象的思想不强调为真实世界建模,变得更加合理化一些,把目标放在解耦上——即解除模块与模块之间的依赖。

    文中说到了继承与组合的比较,在二者均可使用的情况下,更倾向于使用组合,原因是继承存在以下问题:

    1、继承破坏封装性;

    2、继承是紧耦合的;

    3、继承扩展复杂;

    4、不恰当的使用继承可能违反现实世界中的逻辑。

    组合虽然在代码量上的优势不如继承,但总的来说组合的有点大于缺点,具有低耦合等优点(进通过唯一接口和外部进行通信)。

    对于多态的总结如下:

    1、多态指同一类对象在运行时的具体化;

    2、PHP语言是弱类型的,实现多态更简单、更灵活;

    3、类型转换不是多态;

    4、PHP中父类和子类看做“继父”和“继子”关系,他们存在继承关系,但不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特征;

    5、多态的本质是if......else,只不过实现的层级不同。

    1.4    面向接口编程

    接口是一种契约,应该起一个强制规范和契约的作用。在Java中,接口就是一种type(类型),如果你打破了契约,你的行为就会变得无法控制,那就是非法的,这符合现实世界的逻辑,这就是真正接口作为规范的作用。而PHP里的接口在作为规范和契约的作用打了折扣,但PHP中接口可以淡化为设计文档,起到一个团队基本契约的作用。

    书中也提到,由于PHP是弱类型并强调灵活,所以不推荐大规模使用接口,而是仅在部分“内核”代码中使用接口。从语义上考虑,可以更多的使用抽象类。

    关于接口的几个概念:

    1、接口作为一种规范和契约存在。作为规范,接口应该保证可用性;作为契约,接口应该保证可控性;

    2、接口只是一个申明,一旦使用interface关键字,就应该实现它。可以由程序员实现(外部接口),也可以由系统实现(内部接口)。接口本身什么都不做,但是它可以告诉我们它能做什么;

    3、PHP中的接口存在两个不足,一是没有契约限制,二是缺少足够多的内部接口;

    4、接口其实很简单,但是接口的各种应用灵活,设计模式中也有很大一部分是围绕接口展开的。

    我认为,面向接口编程也可以提高程序的可读性,先从接口出发,作为最外一层,了解它主要是做什么,可以让我们更快的理清整个模块的大致流程,然后再层层深入,保持清晰的思路。这样方便后期的维护。

转载于:https://my.oschina.net/xujiaruia/blog/646151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值