PHP学习笔记 -- 面向对象的核心概念

继承与多态都是对类进行复用,它们一个是类级别的复用,一个是方法级别的复用。

类的组合与继承。

低耦合、解耦、紧耦合。

继承存在的问题:
1.继承破坏封装性。
2.继承是紧耦合的。
3.继承扩展复杂。
4.不恰当地使用继承可能违反现实世界中的逻辑。

在创建组合对象时,组合需要一一创建局部对象,这一定程度上增加了一些代码,而继承则不需要这一步,因为子类自动有了父类的方法。

应该如何使用继承:
1.精心设计专门用于被继承的类,继承树的抽象层应该比较稳定,一般不要多于三层。
2.对于不是专门用于被继承的类,禁止其被继承,也就是使用final修饰符。使用final修饰符既可防止重要方法被非法覆写,又能给编辑器寻找优化的机会。
3.优先考虑用组合关系提高代码的可重用性。
4.子类是一种特殊的类型,而不只是父类的一个角色。
5.子类扩展,而不是覆盖或者使父类的功能失效。
6.底层代码多用组合,顶层/业务层代码多用继承。底层用组合可以提高效率,避免对象臃肿。顶层代码用继承可以提高灵活性,让业务使用更方便。

多继承机制:Traits。

多态:
含义:同一类的对象收到相同消息时,会得到不同的结果。而这个消息是不可预测的。
重载并不是面向对象里的东西,和多态也不是一个概念,它属于多态的一种表现形式。
多态性是一种通过多种状态或阶段描述相同对象的编程方式。它的真正意义在于:实际开发中,只要关心一个接口或基类的编程,而不必关心一个对象所属于的具体类。

多态的实现:
1.多态指同一类对象在运行时的具体化。
2.PHP语言是弱类型的,实现多态更简单、更灵活。
3.类型转换不是多态。
4.PHP中父类和子类看做“继父”和“继子”关系,它们存在继承关系,但不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特征。
5.多态的本质就是if…else,只不过实现的层级不同。


接口定义一套规范描述一个“物”的功能,要求如果现实中的“物”想成为可用,就必须实现这些基本功能。

抽象类和接口。

从某种意义上来说,Traits和接口都是对“多重继承”的一种变相实现。

接口的几个概念:
1.接口作为一种规范和契约存在。作为规范,接口应该保证可用性;作为契约,接口应该保证可控性。
2.接口只是一个声明,一旦使用interface关键字,就应该实现它。可以由程序员实现(外部接口),也可以由系统实现(内部接口)。接口本身什么都不做,但是它可以告诉我们它能做什么。
3.PHP中的接口存在两个不足,一是没有契约限制,二是缺少足够多的内部接口。


反射:
面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。
反射,直观理解就是根据到达地找到出发地和来源。
反射指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。

反射的作用:可以用于文档生成。(hook?)

其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言

PHP有Token函数,可以通过这个机制实现一些反射功能。

为什么要使用反射?反射存在的必要性是什么?

反射的目的就是为了扩展未知的应用



异常和错误处理:
异常(exception)和错误(error)的概念是不一样的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值