シングルトン: クラスは 1 つのオブジェクトのみを生成できます。
まず第一に、このクラスは新しいオブジェクトを生成してはなりません。 PHP で新しいオブジェクトを生成するには、new と clone の 2 つの方法があります。コンストラクターと clone メソッドをプライベート化すると、クラス外でインスタンス化するときに新しいオブジェクトが生成されなくなり、クローンが作成されなくなります。これにより、クラスが新しいオブジェクトを生成できないという問題が解決されます。例として Person クラスを取り上げます。
1 class Person2 {3 private function __construct(){} //构造方法4 private function __clone(){} //克隆方法5 }
現時点では新しいオブジェクトを生成する方法がなく、それらをインスタンス化する方法もないため、このクラスには、この「永久オブジェクト」を取得するパブリック静的メソッドが必要です。すべての呼び出し このメソッドがオブジェクトを取得するとき、それは「永久オブジェクト」ですか? get メソッドを呼び出すときに、静的プライベート プロパティ $instance を定義する必要がある場合があります。$instance がオブジェクトであるかどうかを確認し、そうでない場合は、$instance を直接返します。実装コードは次のとおりです:
1 class Person 2 { 3 private static $instance; 4 private function __construct(){} 5 private function __clone(){} 6 7 public static function getInstance(){ 8 if (!is_object(self::$instance)) { 9 self::$instance = new self;10 }11 return self::$instance;12 }13 }
テストコード:
1 $i1 = Person::getInstance();2 echo "i1:";3 var_dump($i1);4 echo "<hr/>";5 echo "i2:";6 $i2 = Person::getInstance();7 var_dump($i2);
出力結果:
オブジェクトは同じ番号を持ちます。同じオブジェクトです。これがシングルトンパターンです。