PHP でのシングルトン モードとモノステート モードの実装

黄舟
リリース: 2016-12-21 10:54:00
オリジナル
1131 人が閲覧しました

一般的に言えば、クラスとオブジェクト (クラスのインスタンス) の間には 1 対多の関係があります。ただし、場合によっては、クラスのインスタンスが 1 つだけ必要な場合もあります。たとえば、複数のインスタンスの多様性は、制御不能な要因をもたらします。また、複数のインスタンス化はリソースの無駄になり、効率が低下します。別の例として、それらが の他のオブジェクトを作成するために使用される場合があります。現時点では、これに対処するより良い方法は、クラス
のインスタンスを単一にすることです。つまり、このクラスが動作中に生成するインスタンスが最大 1 つであることを確認するか (シングルトン モード)、すべてのインスタンスの一貫性を確保します (モノステート モード)。

PHP で実装されたシングルトン モードの例:

<?php
 classSingleton
 {
      privatestatic$instance;
 
      privatefunction__construct()
      {
      }
 
      publicstaticfunctioninstance()
      {
          if(self::$instance==null)
          {
              self::$instance=newSingleton();
          }
 
          returnself::$instance;
      }
 }
 ?>
ログイン後にコピー

シングルトン クラス インスタンスの作成は次のようにするだけです:

$instance=Singleton::instance();
 // 这样是错误的: $instance = new Singleton();
ログイン後にコピー

PHP で実装されたシングルトン モードの特性の詳細な分析:

1 静的なプライベート属性。 : used インスタンスを保存します。Static はクラスがインスタンス化されないことを保証し、Private はクラスのインスタンスによって変更されないことを保証します。

2. プライベート コンストラクター: このクラスをこのクラスの外でインスタンス化することはできません。

3. 静的パブリック メソッド: インスタンスを作成し、その一意性を確保します。 static を使用すると、メソッドをインスタンス化せずに呼び出すことができます。

以下のモノステートと比較して、その利点は次のとおりです:

1. あらゆるクラスに適応でき、上記の 3 つの特性を満たします。

2. クラスを指定して、そのシングルトンのサブクラスを作成できます。

欠点:

1. シングルトン機能は継承できず、そのサブクラスはシングルトン クラスではありません。

2. 使用法は不透明であり、ユーザーはシングルトン クラスを使用し、
new を通じてインスタンス化できないことを知っておく必要があります。

モノステート パターンの基本原則は、モノステート クラスのすべてのインスタンスが同じインスタンスを使用するようにすることです。実際、クラスのすべての属性は静的に宣言できます:

<?php
 classmonostate
 {
      privatestatic$itsX=0;
      
      publicfunction__construct()
      {
          
      }
      
      publicfunctionsetX($x)
      {
          self::$itsX=$x;
      }
      
      publicfunctiongetX()
      {
          returnself::$itsX;
      }
 }
 ?>
ログイン後にコピー

上記は、PHP でのシングルトン モードとモノステート モードの実装の内容です。さらに関連する内容については、PHP の中国語 Web サイト (www.php.cn) に注目してください。 )!


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート