面向对象三大特性:封装
、继承
、多态
。
官方文档:http://php.net/manual/zh/language.oop5.php
要创建一个类的实例,必须使用 new
关键字。如果该类属于一个名字空间,则必须使用其完整名称。
你可以使用 ClassName::class
获取一个字符串,包含了类 ClassName
的完全限定名称。
$this
self
parent
static
当一个方法在类定义内部被调用时,有一个可用的伪变量 $this
。
使用 self::
来访问静态方法和静态变量。
使用 static::
来访问静态方法和静态变量。
使用 parent::
来访问父类的方法和静态属性。
在类定义内部,可以用 new self
和 new 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 ...
}