我想问让一个类创建self实例是否是一种好的做法,例如我有一个类:
class MyClass {
private $data = "";
private $children = array();
public function add() {
$x = new MyClass();
// do something
// $x->some_method('');
$this->children[] = $x;
}
public function children() {
return $this->children;
}
}
这样我可以使用一些Tree功能,但它可以吗?或者我必须做一些不同的事情吗?
例如,创建一个父类a,其中包含类B的子类,并在类1中使用多维数组来存储子类?
也许有人可以建议另一种方法来做这件事?
如果有人有这方面的经验,他能提供他注意到的优点和缺点吗。
让一个类创建自我的实例是一种好的实践吗?
这取决于为什么你这么做。
如果你让类创建自己的实例,因为你把它作为一个单例使用,那么你可能会和一些人就单例设计模式陷入困境。
另一方面,我发现工厂设计模式的自我实例化是精致的。我确实建议在这种特殊情况下这样做。
一般来说,我不会。我唯一认为这是合适的时候是如果你在Singleton中使用它,但事实并非如此。
这里有一篇关于构造函数最佳实践的文章。它相当激烈,但充满了好的信息!
我不认为这是一条硬性规定。这取决于您试图解决的问题空间。
也就是说,如果您正在创建一个类似Tree的结构,并且该结构包含Tree类型的节点,那么树根据主题应用程序中Tree的要求创建自己的实例可能是完全合理的。
您还可以在Singleton设计模式中看到与您的示例大致相似的内容,在该模式中,您希望创建对象的一个通用实例。
因此,我认为答案在于问题的解决方案是否合适。希望这是有道理的。