PHPのシングルトンパターン

autoload
リリース: 2023-04-09 19:04:02
オリジナル
6148 人が閲覧しました

1. シングルトン パターンの起源

クラスは、現実の世界で共通の特性を持つもののクラスを抽象化したものです。クラスのインスタンス化を通じて、多くのオブジェクトが生成されますが、同時に多くのリソースも消費します ( データベース に接続するときの接続数の制限など)。 、コンピューター上で リソース マネージャーを開く には一意性があります)、その結果、クラスのインスタンス化を制限する必要もありました。リソースの一意性を保護するために、シングル ケース モードうまれた。

2. シングルトン パターンの定義

定義: シングルトン パターンは、クラス設計で最大 1 つのオブジェクトのみが生成されるという設計思想です。

3. シングルトン モードのインスタンス

a. 空のクラスを作成します。

b. クラスを複数回インスタンス化できることが、複数のオブジェクトが生成される理由であるため、

コンストラクター メソッド をプライベート化できます。

<?php
   class Use{
   }
   $a=new Use();//实例化一个对象
?>
ログイン後にコピー

c. Privatization

Constructor メソッド は生成されるインスタンス化されたオブジェクトの数を 0 にし、クラス内の static メソッドを通じてコン​​ストラクター メソッドを呼び出せるようにします。その後、コンストラクターを外部に返します。

<?php
  class Use{
    private function __construct()
    {
      echo __FUNCTION__."<br>";
    }
   }
?>
ログイン後にコピー

d. 上記のメソッドでオブジェクトをインスタンス化できますが、コンストラクター メソッドの使用権も解放されます。このメソッドが 1 つのオブジェクトだけを返すようにする場合は、生成されたオブジェクトをクラス内に格納する方法があることを確認する必要があります。新しいオブジェクトが最初に生成され、古いオブジェクトが後で返されます。この場合、静的プロパティを使用する必要があります。

<?php
  class Use{
    private function __construct()
    {
     echo __FUNCTION__."<br>";
    }
    public static function getInstance()
    {
      return new self();
        }
   }
  $s1=Use::getSingleton();
?>
ログイン後にコピー

e. 現時点では、

static メソッド を呼び出すことで object が 1 つだけ取得されることが保証されます。ただし、clone を通じて新しいオブジェクトをインスタンス化することはできるため、clone をプライベート化できます。

<?php
  class Use{
    private static $object = NULL;//初始化为NULL,没有对象 
    
    private function __construct()
    {
      echo __FUNCTION__."<br>";
    }
    
    public static function getInstance()
    {  
      //判断类内部的静态属性是否存在对象
       if(!(self::$object instanceof self)){   //当前保存的内容不是当前类的对象
       self::$object = new self();
    }
      //返回对象给外部
       return self::$object;
    }
   }
  $s1=Use::getSingleton();
?>
ログイン後にコピー

推奨: php チュートリアル

以上がPHPのシングルトンパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!