ホームページ > php教程 > php手册 > PHPシングルトンパターンの核となる考え方

PHPシングルトンパターンの核となる考え方

WBOY
リリース: 2016-06-21 08:53:10
オリジナル
1392 人が閲覧しました

Singleton Pattern (中国語ではシングルトンパターンと呼ばれます) は、最も理解しやすいデザインパターンと言え、DRY を完全に体現しています
(Don't Reply Yourself)と思った。
シングルトン パターンの中心的な考え方は、オブジェクトが存在することを保証し、インスタンスの存在を 1 つだけ許可することと、グローバル アクセス メソッドを提供することです。
シングルトン モードの動作モデルは次のとおりです。オブジェクトが初めてリクエストされると、このオブジェクトのインスタンスが作成され、後続のリクエストごとに、作成されたインスタンスのハンドルのみが渡されます。シングルトン モードに対応するモードは、Prototype (Java プラットフォームの下) または SingleCall (.NET プラットフォームの下) と呼ばれ、このモードでは、オブジェクトが要求されるたびに、新しいインスタンスが作成されます。
WEB プログラムにシングルトン パターンを適用する典型的な例は、データベース接続の作成です。データベース ハンドルを介してデータベースに接続する行為は排他的です。つまり、ハンドルが閉じられるまでは、同じ名前のハンドルを再度作成することはできません。次に、日常的なコーディングで、データベースから返される複数のデータ セットを同じページ上で操作したいとします。現時点で、従来のプロトタイプ プログラミングを使用している場合は、プログラムを安全に動作させるために、複数のデータベース リンク ハンドルを作成するか、データベース接続を繰り返し開閉する必要がある場合があります。このような操作を行うと、プログラムが不必要なリソースを過剰に消費することになるのは明らかです。
このシナリオでは、シングルトン パターンを使用して、同じデータベース ハンドルを維持および共有できます。 2 つの利点があります:
1. プログラム動作のセキュリティを向上しました。データベースの開閉などの問題についてあまり心配する必要はありません。
2. 複数の接続の作成によって生じるリソースの不必要な浪費を回避します。ガベージ コレクション メカニズムはリンク ハンドル上でのみ動作する必要があります。
もちろん、上記 2 つの問題は PHP にとって問題ではありません。PHP のガベージ コレクション メカニズムは、ページが実行されると、データベース接続を含むすべてのリソースとメモリを自動的にクリアします。
この時点で、WEB プログラムでのシングルトン モードのアプリケーション シナリオを要約できます。
1. 一部のリソース自体は排他的であり、この排他的なリソース オブジェクトのインスタンスを複数の場所に繰り返し作成したくない場合があります。
2. 同じオブジェクトのインスタンスへの複数の参照間で、このオブジェクトの状態を共有する必要があります (このルールのコード例を以下に示します)。
PHP 5 でのシングルトンの実装を示すために、以下の小さなコードを作成します:
クラスシングルトン
{
//このメンバー変数は、このオブジェクトへの参照数を記録するために使用されます
プライベート $counter = 1;
//これはプライベートであるため、外部プログラムが解析関数を通じてオブジェクトをインスタンス化することを禁止していることに注意してください
プライベート関数 __construct()
{
}
//このオブジェクトのクローン作成を禁止します
プライベート関数 __clone()
{
}
//このメソッドを通じてオブジェクトの参照を取得する必要があります
パブリック静的関数 getInstance()
{
static $instance = null;
if($instance == null)
{
$instance = new Singleton();
}
$instance を返します;
}
パブリック関数 getusedCount()
{
return $this->counter++;
}
}



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート