2

一部のオープンソース コードでは、なぜ次のコードを使用するのですか。

$router = Cfw_Router::getInstance();

ただ使うのではなく

$rounter = new Cfw_Router();

利点はありますか?


getInstance():

public static function getInstance() {
    if (null === self::$__instance) {
        self::$__instance = new self();
    }
    return self::$__instance;
}
4

3 に答える 3

4

最初の使用はと呼ばれますsingleton。これにより、オブジェクトのインスタンスが1つだけ存在するようになります。

于 2012-04-17T21:14:05.067 に答える
4

彼らはシングルトンパターンを利用しています。基本的に、常に1つのインスタンスのみが存在できます。ただし、グローバル変数を提供するために使用される場合があります。これは、設計で常に最適であるとは限りません(上記のリンクの批判を参照してください)。

于 2012-04-17T21:14:07.093 に答える
2

これは、シングルトンパターンが原因です。getInstanceを使用すると、プログラム全体でオブジェクトのインスタンスが1つだけ作成されますが、newを使用すると、呼び出しごとに新しいオブジェクトインスタンスが作成されます。これは、たとえばデータベース処理オブジェクトで役立ちます。プログラムに複数のオブジェクトインスタンス(および複数の接続)を含めるのではなく、データベースハンドラーのインスタンスを1つだけにし、すべてのプログラムに接続する必要があります。

于 2012-04-17T21:16:57.760 に答える