如何使用PHP超类中定义的继承工厂方法构建子类?

How to build a subclass using an inherited factory method defined in the superclass in PHP?

我是 PHP 的新手。我有三个 class,比如 ABC,其中 BC 直接继承自 A .我的问题是,我需要一个静态工厂,比如 createInstance(),它为 class A 定义了 一次 ,并且适用于它的整个后代。因此,当有人调用 A::createInstance() 时,它 return 是类型 A 的对象,而调用 B::createInstance() return 是 B 的实例,并且C::createInstance() return 是 C 的实例。我将以下代码放在 createInstance() 定义中 class A:

public static function createInstance() {
    return new self();
}

但这不是满足我需求的解决方案,因为 self 总是指 class A 而不管 class 调用什么。换句话说,调用 B::createInstance()C::createInstance 总是 return 类型为 A 的对象。我怎样才能创建这样一个 return 是适当 class 对象的工厂方法?

PHP 有一个 static 关键字,您可以使用:

public static function createInstance() {
    return new static();
}