0

私が疑問に思っている問題は、スタイルやあなたが何を持っているかの問題かもしれません. PHP にシングルトン クラスがあります。オブジェクトが既に作成されているかどうかを確認するときは、次のようにします。

if(self::$instance == null)
  self::$instance = new self();

ただし、PHP のシングルトン パターンの実装で !isset が実行されるのを見たことがあります。

if(!isset(self::$instance))
  self::$instance = new self();

私の理解では、これら 2 つのステートメントに機能上の違いはありません。ある方法は他の方法よりも優れていますか? ある方法は他の方法よりも専門的ですか?

編集:

シングルトン クラス内のパターン全体のコードは次のとおりです。

private static $instance = null;

private function __construct() {    }

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

3 に答える 3

1

保護された/プライベートな静的変数として定義した場合instance、それらは機能的に同じであり、どちらを使用しても問題ありません。

個人的にはisset、PHP の精神に近いもの、== NULL は Java に近いものと考えていますが、それはスタイルの問題です。

于 2013-02-23T22:20:30.600 に答える
0

isset()変数が存在するかどうかわからない場合に使用します。あなたの場合、変数は常にそこにあります。また、次のように書くこともできます。

if(is_null(self::$instance))
  self::$instance = new self();

私は次のように書きます:

public static function getInstance() {
    return is_null(self::$instance) ? new self() : self::$instance;
}
于 2013-02-23T22:27:52.323 に答える
0

最初のものは悪いです。$instance が存在しない場合はエラーになります!

于 2013-02-23T22:19:32.013 に答える