この記事では、主に PHP デザイン パターンのシングルトン パターンを紹介し、そのサンプルは、必要な友人に参照することができます。それに
この記事の例では、PHP デザイン パターンのシングルトン モードについて説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
シングルケースモード (責任モード):
簡単に言うと、オブジェクト (デザイン パターンを学ぶ前にオブジェクト指向の考え方を理解する必要があります) は特定のタスクのみを担当します。
単一インスタンスクラス:1. コンストラクターはプライベートとしてマークする必要があります (アクセス制御: 外部コードが new 演算子を使用してオブジェクトを作成するのを防ぐため)。シングルトン クラスは他のクラスでインスタンス化できず、それ自体でのみインスタンス化できます。 2. クラスのインスタンスを保持する静的メンバー変数を用意します
3. このインスタンスにアクセスするためのパブリック静的メソッドを用意します (一般的に getInstance() メソッドはシングルトン クラスをインスタンス化するために使用され、instanceof 演算子はクラスがインスタンス化されたかどうかを検出するために使用できます)
さらに、オブジェクトがコピー (クローン作成) されるのを防ぐために __clone() メソッドを作成する必要があります
なぜ PHP シングルトン パターンを使用するのですか?
1. PHP は主にデータベース アプリケーションで使用されるため、アプリケーション内で大量のデータベース操作が行われるため、新しい操作によって大量のリソースが消費されることを回避できます。
2. システム内で特定の構成情報をグローバルに制御するクラスが必要な場合は、ZF の FrontController セクションにあるシングルトン モードを使用して簡単に実装できます。
3. ページリクエストでは、すべてのコード (データベース操作クラス db など) が 1 つのクラスに集中しているため、クラス内にフックを設定し、どこでも var_dump や echo を回避してログを出力できるため、デバッグが簡単です。
コードの実装:
?
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
/1** * デザインパターン: シングルトンパターン * $_instance は静的プライベート変数として宣言する必要があります * 外部プログラムが new を使用できないようにするには、コンストラクターとデストラクターをプライベートとして宣言する必要があります * クラスにより、シングルトン パターンの意味が失われます * getInstance() メソッドを public に設定し、このメソッドを呼び出す必要があります * インスタンスへの参照を返す *::operators は静的変数と静的関数のみにアクセスできます * 新しいオブジェクトはメモリを消費します * 使用シナリオ: 最も一般的に使用される場所はデータベース接続です。 * シングルトン モードを使用してオブジェクトを生成した後、 * このオブジェクトは他の多くのオブジェクトで使用できます。 */ クラスダンリ{ //クラスインスタンスの静的メンバー変数を保存する プライベート静的 $_instance; //プライベートタグの構築方法 プライベート関数 __construct(){ echo 'これは構築されたメソッドです;'; } //オブジェクトのコピーやクローン作成を防ぐために __clone メソッドを作成します パブリック関数 __clone(){ trigger_error('クローンは許可されていません!',E_USER_ERROR); } //シングルトン メソッド、インスタンスへのアクセスに使用されるパブリック静的メソッド パブリック静的関数 getInstance(){ if(!(self::$_instanceinstanceofself)){ self::$_instance = 新しい自分; } self::$_instance を返す; } パブリック関数テスト(){ echo 'メソッドの呼び出しに成功しました'; } } // new を使用してプライベート マーク コンストラクターでクラスをインスタンス化すると、エラーが報告されます //$danli = 新しいダンリ(); //正しい方法は、二重コロン::演算子を使用して静的メソッドにアクセスし、インスタンスを取得することです $danli = ダンリ::getInstance(); $danli->test(); //オブジェクトをコピー (クローン作成) すると E_USER_ERROR が発生します $danli_clone = $danli のクローン; |
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。