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.
単例モード(職責モード):
簡単に言えば、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;