【发布时间】:2015-06-30 19:40:31
【问题描述】:
我喜欢this answer 中提出的想法,允许在 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,而我希望 @987654331 @be 上课B.
如果我使用$this 特殊变量,这当然是B 类,即使在A 范围内,如果我从B 调用任何父方法。
我知道我可以复制整个 create() 方法(也许 Traits 有帮助?),但我还必须复制所有“构造函数”(所有 create* 方法),这很愚蠢。
我如何帮助$bb 变成B,即使在A 上下文中调用该方法?
【问题讨论】:
-
您正在寻找Late Static Bindings。
-
也许你想要
static而不是self? -
@bishop 谢谢 - 它奏效了。您能否创建一个答案以便我接受?
-
@ArtisiticPhoenix 不,
parent错了,因为我想往下走,给孩子,而不是给父母,但static工作得很好,谢谢大家
标签: php static-methods multiple-constructors