一.魔术方法
魔术方法 | 作用 |
---|---|
__construct() | 当一个对象创建时调用此方法 |
__destruct() | PHP将在对象被销毁前(即从内存中清除前)调用这个方法 |
__call() | 当调用一个未定义的方法是调用此访求 |
__callStatic() | 当无法通过静态方法访问时自动触发 |
__get() | 当调用一个未定义的属性时访问此方法 |
__set() | 给一个未定义的属性赋值时调用 |
__set_state() | 用var_export()输出一个对象时 |
__isset() | 当在一个未定义的属性上调用isset()函数时调用此方法 |
__unset() | 当在一个未定义的属性上调用unset()函数时调用此方法 |
__sleep() | 串行化的时候用 |
__wakeup() | 反串行化的时候调用 |
__toString() | 将一个对象转化成字符串时自动调用 |
__invoke() | 当将对象当成函数使用的时候自动调用 |
__clone() | 想复制一个对象则需要使用clone方法 |
__autoload() | 它会在试图使用尚未被定义的类时自动调用 |
二.魔术常量
魔术常量 | 作用 |
---|---|
__DIR__ | 文件所在的目录 |
__FILE__ | 文件的完整路径和文件名 |
__LINE__ | 文件中的当前行号 |
__NAMESPACE__ | 当前命名空间的名称(大小写敏感) |
__CLASS__ | 返回对象的类名 |
__FUNCTION__ | 返回的仅仅是函数的名称 |
__METHOD__ | 返回的是函数的名称和类名 |
__STATIC__ | 当你调用class的静态方法时,返回class名称,区分大小写 |
三.面向对象的特性
- 封装:隐藏对象的属性和实现细节,对外提供公共的访问方式,以防止数据的随意访问和修改。
- 继承:通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。
- 多态:
- 1.满足继承关系
- 2.父类引用变量指向子类对象
- 3.子类重写父类的方法
四.访问控制
-
public: 既可以让子类使用,也可以支持实例化之后的调用
-
private: 私有类型,只能够是在当前的类中可以被访问到
-
protected: 受保护,访问的权限是只有在子类和当前类才可以被访问到
-
static 属性:
- 静态方法只能访问其他的静态方法或属性
- 对静态变量做修改会直接影响到类中
- 访问静态对象不需要实例化类
- 为什么使用static?
- 使用static的优点在于不需要使用全局变量即可保持变量,不泄露内存
- 也不容易导致全局变量被误用(因为作用域不在全局)
-
final 属性:
- 一个类被声明为 final 时不能被继承
- 一个类中的方法被声明为 final,则子类中此方法无法被重写
-
interface :
- 定义一个接口类, 接口是类的一个模板,其子类必须实现接口中定义的所有方法
- 注意: 子类没有继承会报错
- 语法如下:
- interface 关键字指定接口类
- implements 关键字指定继承关系
-
abstract :
- 定义一个抽象类, 作为父类既有自己的方法属性可以被继承(该方法具有方法体),
- 又能声明抽象类, 继承的子类必须实现这些抽象类否则报错
- 是一种介于 类 和 接口 的特殊类
-
interface && abstract 的区别:
- 一个类可以实现多个 interface ,但一个类只能继承一个 abstract class
- interface 中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体 ) ,实现类必须要实现。而 abstract class 中并非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子类必须实现
- 接口中的抽象方法只能是 public 的,不能用 private , protected 修饰符修饰。而抽象类中的抽象方法只能是 public / protected 来修饰,但不能用 private
- 接口中的抽象方法前不用也不能加 abstract 关键字,默认隐式就是抽象方法; 抽象类中抽象方法前则必须加上 abstract 表示显式声明为抽象方法
六.设计模式
- 单例模式
- 工厂模式
- 组合模式
- 策略模式
七.面向对象的设计原则
-
单一职责原则(Single-Resposibility Principle)
-
开放封闭原则(Open-Closed principle)。"软件实体应该是可以扩展的,但是不可修改。
-
Liskov替换原则(Liskov-Substituion Principle)。"子类型必须能够替换掉它们的基类型。
-
依赖倒置原则(Dependecy-Inversion Principle)。"抽象不应依赖于细节,细节应该依赖于抽象。
-
接口隔离原则(Interface-Segregation Principle)。"多个专用接口优于一个单一的通用接口。
-
良性依赖原则。"不会在实际中造成危害的依赖关系,都是良性依赖。