本文是温习所写,并不会涵盖一些根底知识点
基本概念
-
应用
class
关键字来定义类,应用new
来创立类的实例<?php class Test { public $attr = 1; // 公共属性 public function foo() {echo $this->attr;} } // 形式一 $obj = new Test(); $obj->foo(); // 形式二 // 与可变函数相似,称为可变类吧 $className = 'Test'; $obj = new $className(); $obj->foo(); // 形式三 PHP8 function getClassName() {return 'Test';} $obj = new (getClassName()); $obj = new (Test::class);
在类外部能够应用
new self
、new parent
创立新对象将对象实例赋值给一个新变量时,新变量拜访的是同一实例。要创立一个新实例必须应用克隆操作
- 类的属性和办法存在与不同的空间,所以同一个类的属性和办法能够应用同样的名称
- 应用
extends
实现类继承,PHP 只反对单继承。 -
::class
类名解析<?php namespace Demo {class Test() { } // 形式一 echo Test::class; } // 形式二 PHP8 $obj = new Test(); echo $obj::class; // 等同于 get_class()
-
Nullsafe 办法和属性 PHP 8
?->
nullsafe 操作符,对象援用解析为 null 时不抛出异样,而是返回 null
属性
<?php
class Test
{
// 拜访控制符
public $attr = 1;
protected $attr1 = 2;
private $attr2 = 3;
// 动态
public static $attr3 = 4;
// 类型申明 PHP7.4
public int $attr4 = 4;
// 只读 PHP8
public readonly $attr5 = 5;
}
类常量
<?php
class A {
const ATTR_1 = 1;
// 应用拜访修饰符 PHP7.1
public const ATTR_2 = 2;
protected const ATTR_3 = 3;
private const ATTR_4 = 4;
// final 常量 PHP8.1
final const ATTR_5 = 5;
}
class B extends A
{const ATTR_1 = 6; // 能够在子类中重定义}
类的主动加载
举荐应用 spl_autolad_register()
来注册主动加载器,能够注册任意多个
__autolad()
的形式曾经废除,并在 PHP8 中移除
构造函数和析构函数
-
结构器属性晋升 PHP 8
当结构器参数带有访问控制时,PHP 会同时将它们当作对象属性和结构器参数,并赋值到属性
范畴解析操作符::
抽象类
任何一个类,如果它外面至多有一个办法是形象的,那么这个类就必须被申明形象的
抽象类也能够实现接口
接口
接口也能够应用 extends
来扩大
也能够定义常量,PHP8.1 之前不能被子类或子接口笼罩
Trait
- 优先级:以后类 >Trait> 父类
-
抵触解决
insteadof
用于排除另一个 trait 中同名办法as
将 trait 中办法重命名,也能够用于批改办法的拜访修饰符 - trait 中也能够应用其它 trait
- trait 中能够定义属性、办法、形象办法、静态方法、动态属性
匿名类
重载
PHP 中的重载是指在拜访未定义的属性、办法时,会调用特定的魔术办法
属性重载:
__set()
__get()
__isset()
__unset()
办法重载:
__call()
__callStatic()
遍历对象
对象的可见属性都将被遍历
魔术办法
前期动态绑定
self::
代表的是以后办法所在的类的实例
static::
限定调用的办法未指定类中的办法
<?php
class A {public static function who() {echo __CLASS__;}
public static function test() {static::who(); // 前期动态绑定从这里开始
}
}
class B extends A {public static function who() {echo __CLASS__;}
}
B::test(); // Output: B
协变与逆变
协变使子类比父类办法能返回更具体的类型
逆变使子类比父类办法参数类型能承受更含糊的类型。