4

クラスに自分自身のインスタンスを作成させるのが良い習慣かどうかを尋ねたいと思います。たとえば、クラスがあります。

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;
    }
}

そうすれば、いくつかのツリー機能を使用できますが、それで問題ありませんか、それとも別のことをする必要がありますか?

たとえば、クラスBの子を持つ親クラスAを作成し、クラスAの多次元配列を使用して子を格納しますか?

多分誰かがこれを行う別の方法を提案することができますか?

誰かがこれを経験したことがあれば、彼が気付いた賛否両論を提供してください。

4

3 に答える 3

4

クラスに自己のインスタンスを作成させるのは良い習慣ですか?

それはあなたがそれをしている理由によります。

クラスをシングルトンとして使用しているためにクラスにそれ自体のインスタンスを作成させる場合は、一般的なシングルトン設計パターンについて何人かの人々と熱狂することができます。

一方、ファクトリ デザイン パターンを目的とした自己インスタンス化は絶妙だと思います。そして、その特定のケースでそれを行うことをお勧めします。

于 2012-07-11T18:26:20.847 に答える
1

一般的に、私はしません。これが適切であることがわかるのは、シングルトンで使用している場合だけですが、そうではないようです。

コンストラクターのベスト プラクティスに関する記事はこちらです。かなり激しいですが、お得な情報が満載です!

于 2012-07-11T18:29:24.560 に答える
1

いずれにせよ、それが難しくて速いルールだとは思いません。それは、解決しようとしている問題空間によって異なります。

つまり、ツリーのような構造を作成していて、その構造にツリー型のノードが含まれている場合、対象アプリケーションのツリーの要件に応じて、ツリーがそれ自体のインスタンスを作成することは完全に合理的です。

また、オブジェクトのユニバーサル インスタンスを 1 つだけ作成する、Singleton デザイン パターンの例とほぼ同じものも見られます。

ですから、答えは問題に対する解決策の適合性にあると思います。それが理にかなっていることを願っています。

于 2012-07-11T18:29:53.043 に答える