new static和new self

在一个类中常见的是new self()操作,代表返回自身类的实例

当父类中存在方法,然后每个子类继承于父类,调用这个方法会返回自身的实例化对象

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Person
{
function create() {
return new self();
}
}
class Subclass extends Person
{

}
(new Subclass())->create(); // 返回Person的实例

那么当子类调用create时,返回是的Person类的实例

如果调用父类中返回实例的方法,要返回当前子类的实例化对象,那么我们可以使用new static()来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Person
{
function create() {
return new static();
}
}

class Subclass extends Person
{

}
(new Subclass())->create(); // 返回Subclass的实例

那么当子类调用create时,返回是的Subclass类的实例

坚持原创技术分享,您的支持将鼓励我继续创作!