PHP設計モードの単例モード学習


単例モードの方が理解しやすいので、紹介を見て、コードの基本を見ても理解できます.デザインモードなどの工夫は基本的に理解できます.もちろん、プロジェクトにうまく運用するには一定の実践が必要です.理解しているだけでなく、理解しているだけでなく、すごいことを言っているわけではありません.実際に操作するとだめです.くだらないことは多く言わないでください.PHP戦線の皆さん、頑張ってください.
単例モード(職責モード):
簡単に言えば、1つのオブジェクト(設計モードを学ぶ前に、オブジェクト向けの思想を比較的に理解する必要がある)は1つの特定のタスクだけを担当します.
単一クラス:
1、コンストラクション関数はprivate(アクセス制御:外部コードがnewオペレータを使用してオブジェクトを作成することを防止する)とマークする必要があり、単例クラスは他のクラスでインスタンス化できず、それ自体でインスタンス化するしかない.
2、保存クラスのインスタンスを持つ静的メンバー変数
3、このインスタンスにアクセスする共通の静的メソッド(getInstance()メソッドを使用して単一のクラスをインスタンス化し、instanceofオペレータでクラスがインスタンス化されているかどうかを検出する)
また、__を作成する必要がありますclone()メソッドオブジェクトのコピー(クローン)を防止
どうしてPHP単例モードを使うのですか?
1、phpの応用は主にデータベース応用にあるので、一つの応用に大量のデータベース操作が存在し、単例モードを使用すれば、大量のnew操作で消費される資源を避けることができる.
2.システムの中にある構成情報をグローバルに制御するクラスが必要である場合、単一例モードを用いることが容易に実現できる.これはZFのFrontController部分を参照できます.
3、1回のページ要求では、すべてのコード(例えばデータベース操作クラスdb)が1つのクラスに集中しているため、クラスにフックを設定し、ログを出力することができ、var_を避けることができます.dump, echo.
<?php
 /1**
 *          
 * $_instance            
 *                 ,      new
 *             
 * getInstance()          ,       
 *           
 * ::                
 * new        
 *     :            。
 *              ,
 *                。
 */
 class Danli {
 
 //            
 private static $_instance;
 
 //private       
 private function __construct(){
 echo 'This is a Constructed method;';
 }
 
 //  __clone           
 public function __clone(){
 trigger_error('Clone is not allow!',E_USER_ERROR);
 }
 
 //    ,              
 public static function getInstance(){
 if(!(self::$_instance instanceof self)){
 self::$_instance = new self;
 }
 return self::$_instance;
 }
 
 public function test(){
 echo '      ';
 }
 
 }
 
 // new   private           
 //$danli = new Danli();
 
 //    ,    ::             
 $danli = Danli::getInstance();
 $danli->test();
 
 //  (  )       E_USER_ERROR
 $danli_clone = clone $danli;