この記事では、PHP デザインパターンの例のシングルトンモード方法を紹介します。詳しく知りたい人は参考にしてください。
単一インスタンスクラス:
1. コンストラクターはプライベートとしてマークされる必要があります。シングルトン クラスは他のクラスでインスタンス化できませんが、それ自体でのみインスタンス化できます。
2. クラスを保存するインスタンスの静的メンバー変数を用意します
3. このインスタンスにアクセスするためのパブリック静的メソッドを用意します。 [getInstance() メソッドはシングルトン クラスのインスタンス化に一般的に使用され、instanceof 演算子はこのクラスがインスタンス化されているかどうかを検出するために使用できます]
注: オブジェクトがコピーされないようにするには、__clone() メソッドを作成する必要があります
機能:
1.php アプリケーションは主にデータベースに使用されるため、アプリケーション内で多数のデータベース操作が行われるため、シングルトン モードを使用すると、大量の新しい操作によるリソースの消費を回避できます
。
2. 特定の構成情報をグローバルに制御するためにシステム内でクラスが必要な場合は、シングルトン モードを使用して簡単に実装できます。 ZF
のFrontController部分を参照してください。
3. デバッグを容易にするために 1 ページにリクエストの概要を表示します。すべてのコードが 1 つのクラスに集中しているため、クラスにフックを設定してログを出力でき、それによってどこでも var_dump や echo を回避できます。
PHPシングルトンパターンの例。
コードは次のとおりです
| コードをコピー
|
/**
* シングルトンモード
*/
ダンリークラス{
//静的メンバー変数
プライベート静的 $_instance;
//私設工法
プライベート関数 __construct(){
}
//オブジェクトの複製を防止します
パブリック関数 __clone(){
trigger_error('クローンは許可されていません!',E_USER_ERROR);
}
パブリック静的関数 getInstance(){
If(!(self::$_instanceinstanceofself)){
self::$_instance = 新しい自己;
}
return self::$_instance;
}
パブリック関数テスト(){
「ok」をエコーする;
}
}
//エラー: $danli = new DanLi(); $danli_clone = クローン $danli;
//正解: $danli = DanLi::getInstance(); $danli->test();
?>
|
PHP シングルトン モードを使用する必要がある理由について説明しましょう。
ほとんどの人は、シングルトン パターンの目的を文字通りに理解し、システム リソースを節約し、繰り返しのインスタンス化を回避し、一種の「家族計画」であると考えています。また、PHP は毎回ページを実行するため、すべてのリソースがメモリから消去されます。 PHP のシングルトンは実際には実行されるたびに再インスタンス化する必要があるため、この点だけから見ても、PHP のシングルトンは確かに少し残念です。しかし、シングルトンにはこれしかありません。機能とアプリケーションについて教えてください。答えは「ノー」です。見てみましょう。
1. PHP は主にデータベース アプリケーションで使用されるため、オブジェクト指向で開発する場合 (ナンセンス)、シングルトン モードを使用すると大量のデータベース操作を回避できます。新しい操作によって消費されるリソース。
2. システム内の特定の構成情報をグローバルに制御するためにクラスが必要な場合は、zend フレームワークの FrontController 部分にあるシングルトン モードを使用して簡単に実装できます。
3. ページリクエストでは、すべてのコード (データベース操作クラス db など) が 1 つのクラスに集中しているため、クラス内にフックを設定してログを出力し、どこでも var_dump や echo を回避できます。
コードは次のとおりです |
コードをコピー |
/**
* デザインパターン シングルトンパターン
* $_instance は静的プライベート変数として宣言する必要があります
* 外部プログラムが new されるのを防ぐために、コンストラクターとデストラクターをプライベートとして宣言する必要があります
* したがって、クラスはシングルトン パターンの意味を失います
* getInstance() メソッドを public に設定し、このメソッドを呼び出す必要があります
* インスタンスへの参照を返す
*::operator は静的変数と静的関数のみにアクセスできます
* 新しいオブジェクトはメモリを消費します
* 使用シナリオ: 最も一般的に使用される場所はデータベース接続です。
* シングルトンモードを使用してオブジェクトを生成した後、
* このオブジェクトは他の多くのオブジェクトで使用できます。 */
クラスの例
{
// この属性にサンプル インスタンスを保存します
プライベート静的 $_instance;
//オブジェクトの直接作成を防ぐために、コンストラクターはプライベートとして宣言されています
プライベート関数 __construct()
{
echo '私は構築されています';
}
//シングルケースメソッド
パブリック静的関数singleton()
{
if(!isset(self::$_instance))
{
$c=__CLASS__;
self::$_instance=new $c;
}
自分自身を返す::$_instance;
}
//ユーザーがオブジェクト インスタンスをコピーできないようにします
パブリック関数 __clone()
{
trigger_error('クローンは許可されていません' ,E_USER_ERROR);
}
関数テスト()
{
echo("テスト");
}
}
//コンストラクターがprivate宣言されているため、この書き方は間違いになります
$test = 新しい例;
//以下はサンプルクラスのシングルトンオブジェクトを取得します
$test = 例::singleton();
$test->test();
// オブジェクトをコピーすると E_USER_ERROR が発生します。
$test_clone = クローン $test;
?>
|
http://www.bkjia.com/PHPjc/628780.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628780.html技術記事この記事では、シングルトン モードの PHP デザイン パターンの例を紹介します。詳しく知りたい人は参考にしてください。 シングルトン クラス: 1. コンストラクターはプライベートとしてマークする必要がありますが、シングルトン クラスはプライベートとしてマークする必要はありません...