<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_66333"> <div class="blockcode"> <div id="code_DTi"><ol> <li><?php<li>/**<li> *<li> * ユーザー: jifei<li> * 日付: 2013-07-31<li> * 時間: 23:19<li>*/<li>/**<li> * クラス Singleton<li> * シングルトン パターンはモナド パターンとも呼ばれ、一般的に使用されるソフトウェア設計パターンです。このパターンを適用する場合、シングルトン オブジェクトのクラスはインスタンスが 1 つだけ存在することを保証する必要があります。<li> * は DRY (Don't Reply Yourself) の考えを完全に体現しています。 <li> *<li> * シングルトン パターンの実装の考え方は次のとおりです: クラスはオブジェクトへの参照 (常に同じもの) とインスタンスを取得するメソッド (通常は getInstance という名前を使用する静的メソッドである必要があります) を返すことができます。 ; <li> * このメソッドを呼び出すと、クラスが保持する参照が空でない場合は、クラスのインスタンスが作成され、その参照が返されます。インスタンスはクラスが保持する参照に割り当てられます <li> * 同時に、クラスのコンストラクターはプライベート メソッドとして定義されるため、他のコードがクラスのコンストラクターを呼び出してクラスのオブジェクトをインスタンス化することはできません。クラスの唯一のインスタンスは、クラスが提供する静的メソッドを通じてのみ取得できます。 <li> *<li> * アプリケーション シナリオ: クラスにインスタンスが 1 つだけあるシナリオに適しています。データベース接続、ロギング、ショッピング カート <li> * 欠点: PHP はページ レベルで実行され、ページ間でメモリ データを直接共有できません。 <li>*/<li>class Singleton<li>{<li> //クラスインスタンスのプライベート静的メンバー変数を保存<li> private static $_instance; <li> //プライベート コンストラクター メソッド<li> プライベート関数 __construct()<li> {<li> echo 'これは構築されたメソッドです;';<li> }<li> // オブジェクトが複製されないように空のプライベート __clone メソッドを作成します<li> プライベート関数 __clone()<li> { <li> }<li> //唯一のインスタンス オブジェクトを取得するために使用されるシングル ケース メソッド<li> public static function getInstance()<li> {<li> if (!(self::$_instance instantof self)) {<li> //instanceof はオブジェクトの検出に使用されますおよびクラスの所属、オブジェクトが属するクラスがクラスのサブクラスであるかどうか is_subclass_of <li> self::$_instance = new self();<li> }<li> return self::$_instance;<li> }<li> //Test<li> public function test()<li> {<li> echo 123;<li> }<li>}<li>$a = Singleton::getInstance();<li>$a->test();<li>echo PHP_EOL;<li>$b = Singleton::getInstance(); /2 回目の呼び出しではコンストラクターは実行されません<li>$b->test();</li> <li>echo PHP_EOL;</li> <li>//$c=new Singleton(); コンストラクターはプライベートであるため、エラーが報告されます</li> <li>//$ d=clone $a; オブジェクトのクローンを作成する エラーを報告する</li> </ol></div> <em onclick="copycode($('code_DTi'));">コードをコピーする</em> </div> <br> </td></tr></table> <div class="ptg mbm mtn"> PHP</div> <div id="comment_66333" class="cm"> </div> <div id="post_rate_div_66333"></div> <br><br>