Skip to content

Latest commit

 

History

History
63 lines (44 loc) · 3.75 KB

03.0.面向对象编程.md

File metadata and controls

63 lines (44 loc) · 3.75 KB

面向对象�编程

###目的

  • 高内聚,低耦合

面向对象设计的基本原则

  1. 单一职责:一个类只做一件事
  2. 开闭原则:对扩展开放对修改关闭
  3. 里氏替换:子类必须能替换所有父类的使用
  4. 依赖倒置:设计依赖于抽象而不是实现
  5. 接口隔离:接口倾向于小而多
  6. 最少知识:对象应当尽可能少的去了解其他对象
  7. 组合优先:优先使用类的组合而不是继承

抽象类和接口的使用

  • 当类中有共同的行为或属性时,可以考虑使用 abstract calss
  • 当类别中有共同的操作界面,但是在实现上有所差别,可以考虑使用 interface

##一些概念

  1. Static(静态)关键字

声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

  1. 抽象类

PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。

  1. 对象接口 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

  1. Trait Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

    Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。

  2. Final 关键字 PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。 一般是为了防止父类的一个方法被重写

  3. 类与对象二者之间的关系:

    • 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理
    • 对象就是数据,对象本身不包含方法。但是对象有一个指针指向一个类,这个类里面可以有方法。
    • 方法描述不同属性所导致的不同表现。
    • 类和对象是不可分割的,有对象就有一个类和其对应。
  4. 多态

    • 多态指同一类对象在运行时的具体化
    • PHP语言室弱类型的,实现多态更简单,更灵活
    • 类型转换不是多态
    • PHP中父类和子类是继父和继子关系,他们存在继承关系,不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特征。
  5. 接口

    • 接口作为一种规范和契约存在。作为规范,接口应该保证可用;作为契约,接口应该保证可控性。
    • 接口只是一个声明,一旦使用了interface关键字,就应该实现它。接口本身什么都不做,他只是告诉我们他能做什么。
    • PHP中的接口存在二个不足,一是没有契约限制,二是缺少足够多的内部接口