PHP实例化继承

时间:2012-01-26 14:14:45

标签: php class inheritance instantiation

我有一个抽象的超类。

abstract class SuperClass{

    public static function loadInstanceFromText(){

        $instance = new self();
        // do some stuff, etc.
        return $instance;

    }

}
显然,在引用SuperClass时调用该方法是不可能的,但我也有一个孩子

class ChildClass extends SuperClass{

}

我期望它能够发挥作用。我调用以下函数:

ChildClass::loadInstanceFromText();

但是,它不起作用,因为尝试实例化super,而不是ChildClass。那有什么解决方法吗?因为loadInstanceFromText很复杂,但在所有继承中基本上应该是相同的。

1 个答案:

答案 0 :(得分:2)

关键字self表示声明它的类。因此,在这种情况下,new self()将创建一个新的SuperClass,这是不可能的,因为它是抽象的。

另一方面,关键字static表示调用类。这称为“Late Static Binding”,自版本5.3起支持。因此,您可以使用new static(),它会按预期创建新的ChildClass