PHP 面向对象

时间:2022-04-29
本文章向大家介绍PHP 面向对象,主要内容包括$this self parent static、属性、方法、类常量、静态 static、访问控制、魔术方法、重载、其他、多态、对象继承、抽象类 abstract、接口 interface、多继承 trait、对象比较、类型约束、后期静态绑定、对象和引用、对象序列化、对象复制、PHP 7 新特性、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

面向对象三大特性:封装继承多态

官方文档:http://php.net/manual/zh/language.oop5.php

要创建一个类的实例,必须使用 new 关键字。如果该类属于一个名字空间,则必须使用其完整名称。

你可以使用 ClassName::class 获取一个字符串,包含了类 ClassName 的完全限定名称。

$this self parent static

当一个方法在类定义内部被调用时,有一个可用的伪变量 $this

使用 self:: 来访问静态方法和静态变量。

使用 static:: 来访问静态方法和静态变量。

使用 parent:: 来访问父类的方法和静态属性。

在类定义内部,可以用 new selfnew parent 创建新对象。

属性、方法、类常量

属性 中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。

静态 static

  • 静态方法
  • 静态属性

访问控制

  • private
  • protected
  • public

魔术方法

构造函数、析构函数

  • __construct()
  • __destruct()

重载

  • __call()
  • __callStatic()
  • __get()
  • __set()
  • __isset()
  • __unset()

其他

  • __sleep() 常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。
  • __wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
  • __toString() 方法用于一个类被当成字符串时应怎样回应,例如 echo $obj
  • __invoke() 当尝试以调用函数的方式调用一个对象时,此方法会被调用。例如 obj($arg)
  • __set_state() 当调用 var_export() 导出类时,此静态方法会被调用。
  • __clone()
  • __debugInfo() 对对象使用 var_dump() 时,该方法被调用。例如 var_dump(new MyClass(42));

多态

对象继承

一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。

子类可以覆盖父类的属性或方法,当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。

final 禁止继承

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

用于 方法 前。

抽象类 abstract

抽象类中的抽象方法不能有具体实现。

抽象类中的普通方法有具体的实现。

抽象类不能被实例化。用于被其他类继承,子类必须定义抽象类中所有的抽象方法。

接口 interface

接口中的方法不能有具体实现。

接口中的方法必须公有。

实现接口

implements

实现接口的类必须实现接口中定义的 所有 方法。

一个类可以实现多个接口,使用逗号分隔。

接口也可以继承接口 extends。接口可以继承多个接口。

接口常量不能被覆盖。

多继承 trait

一个类使用多个 trait

使用 use,并用逗号分隔。

class MyClass {
  use Hello, World;

  public function ...
}

对象比较

类型约束

后期静态绑定

对象和引用

对象序列化

对象复制

PHP 7 新特性

匿名类