对象方法创建其类的实例


Object method creating instance of its class

我想问让一个类创建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设计模式中看到与您的示例大致相似的内容,在该模式中,您希望创建对象的一个通用实例。

因此,我认为答案在于问题的解决方案是否合适。希望这是有道理的。