self ::引用父类的静态方法中的派生类
我喜欢这个答案中提出的想法,允许在PHP中使用多个构造函数。 我有的代码类似于:
class A {
protected function __construct(){
// made protected to disallow calling with $aa = new A()
// in fact, does nothing
};
static public function create(){
$instance = new self();
//... some important code
return $instance;
}
static public function createFromYetAnotherClass(YetAnotherClass $xx){
// ...
}
class B extends A {};
$aa = A::create();
$bb = B::create();
现在我想创建派生类B
,它将使用相同的“伪构造函数”,因为它是相同的代码。 然而,在这种情况下,当我不编写create()
方法时, self
常量就是A
类,所以变量$aa
和$bb
都是A
类A
,而我希望$bb
是B
类。
如果我使用$this
特殊变量,这当然会是类B
,即使在A
范围内,如果我调用B
任何父类方法。
我知道我可以复制整个create()
方法(也许Traits确实有帮助?),但我也必须复制所有“构造函数”(全部create*
方法),这很愚蠢。
如何帮助$bb
变为B
,即使方法在A
上下文中调用?
你想使用static
,它代表调用该方法的类。 ( self
表示定义方法的类。)
static public function create(){
$instance = new static();
//... some important code
return $instance;
}
请参阅Late Static Bindings文档。
你需要PHP 5.3+来使用它。
链接地址: http://www.djcxy.com/p/58041.html上一篇: self:: referring to derived class in static methods of a parent class