當方法位於父類中時,如何返回被調用類的實例。創建被調用類的新實例而不是父類
例如,在下面的示例中,如果我撥打B::foo();
,如何返回B
的實例?
abstract class A
{
public static function foo()
{
$instance = new A(); // I want this to return a new instance of child class.
... Do things with instance ...
return $instance;
}
}
class B extends A
{
}
class C extends A
{
}
B::foo(); // Return an instance of B, not of the parent class.
C::foo(); // Return an instance of C, not of the parent class.
我知道我能做到這樣的事情,但有一個更合適的方法:
abstract class A
{
abstract static function getInstance();
public static function foo()
{
$instance = $this->getInstance(); // I want this to return a new instance of child class.
... Do things with instance ...
return $instance;
}
}
class B extends A
{
public static function getInstance() {
return new B();
}
}
class C extends A
{
public static function getInstance() {
return new C();
}
}
你所寫的代碼應該給一個致命的錯誤。抽象類(A)不能被實例化。 –
它是一個例子。 – Adam