【发布时间】:2012-12-12 19:37:57
【问题描述】:
我想构建一个抽象类,它将使用静态函数实例化它的子类。
<?php
class A
{
protected $value;
public function __construct($value)
{
$this->value = $value;
}
public static function create($value)
{
/* A must not know about B!
* I give that example for the context understanding */
return **new B**($value);
}
}
class B extends A
{
}
当然A没有知道B..我不知道这是否可能,我不想在我所有的170个子类中实现create函数...
你认为我应该使用 Factory 来返回我的 170 个类之一的实例吗?这很麻烦,也不是很容易维护..
【问题讨论】:
-
抱歉,我不明白你到底想要什么。
-
有可能,见
static关键字或后期静态绑定。很可能你做错了(因为你可以只使用标准构造函数),只是这样说,这样你以后就可以不说你没有被警告过。 -
正如你提到的,A 不会知道它的任何孩子,也不应该知道。您正在努力实现的预期行为是什么?听起来您确实在寻找工厂设计。
-
170 个子类 - 这是另一种出现问题的气味。只是说,可能有合理的理由,但通常这是你做错事的明显迹象。
-
new static()会工作...但是去工厂,它好多了。