ホームページ  >  記事  >  バックエンド開発  >  コード分​​析 PHP 単一要素パターンの原則_PHP チュートリアル

コード分​​析 PHP 単一要素パターンの原則_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-15 13:28:14926ブラウズ

デザイン パターンは Java アーキテクトのみが使用できるものであるという誤った考えを誰もが常に持っています。実際、デザイン パターンは誰にとっても非常に役立ちます。この記事を読んだ後は、間違いなく PHP の単一要素パターンを紹介します。

一部のアプリケーション リソースは、このタイプのリソースが 1 つしかないため排他的です。たとえば、データベース ハンドルを介したデータベースへの接続は排他的です。アプリケーション全体でデータベース ハンドルを共有する必要があるのは、接続を開いたままにするか閉じたままにするときにオーバーヘッドが発生するためであり、単一ページをフェッチするプロセスではさらにオーバーヘッドがかかるからです。 PHP 単一要素モードは、この要件を満たすことができます。アプリケーションに一度に 1 つのオブジェクトだけが含まれる場合、このオブジェクトはシングルトンです。リスト 1 のコードは、PHP V5 のデータベース接続シングルトンを示しています。

PHP 単一要素パターンのケース :

リスト 1. Singleton.php

<ol class="dp-xml">
<li class="alt">
<span><strong><font color="#006699"><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN></FONT></STRONG><SPAN> </SPAN></SPAN><LI class=""><SPAN>require_once("DB.php");  </SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>class DatabaseConnection  </SPAN><LI class=alt><SPAN>{  </SPAN><LI class=""><SPAN>public static function get()  </SPAN><LI class=alt><SPAN>{  </SPAN><LI class=""><SPAN>static $</SPAN><SPAN class=attribute><FONT color=#ff0000>db</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>null</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=alt><SPAN>if ( $</SPAN><SPAN class=attribute><FONT color=#ff0000>db</FONT></SPAN><SPAN> == null )  </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>db</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>new</FONT></SPAN><SPAN> DatabaseConnection();  </SPAN></SPAN><LI class=alt><SPAN>return $db;  </SPAN><LI class=""><SPAN>}  </SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>private $</SPAN><SPAN class=attribute><FONT color=#ff0000>_handle</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>null</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>private function __construct()  </SPAN><LI class=alt><SPAN>{  </SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute><FONT color=#ff0000>dsn</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>'mysql://root:password@localhost/photos'</FONT></SPAN><SPAN>;  </SPAN></SPAN><LI class=alt><SPAN>$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></span></font></strong></span><span class="attribute"><font color="#ff0000">_handle</font></span><span> =& DB::Connect( $dsn, array() );  </span>
</li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>public function handle()  </span></li>
<li class="alt"><span>{  </span></li>
<li class="">
<span>return $this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>_handle;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class="">
<span>print( "</span><span class="attribute"><font color="#ff0000">Handle</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">".DatabaseConnection::get()->handle()."</font></span><span>n" );  </span>
</li>
<li class="alt">
<span>print( "</span><span class="attribute"><font color="#ff0000">Handle</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">".DatabaseConnection::get()->handle()."</font></span><span>n" );  </span>
</li>
<li class="">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>

このコードは、DatabaseConnection という名前の単一クラスを示しています。コンストラクターはプライベートであるため、独自の DatabaseConnection を作成することはできません。ただし、静的 get メソッドを使用すると、DatabaseConnection オブジェクトを 1 つだけ取得できます。最良の証拠は、handle メソッドによって返されるデータベース ハンドルが 2 つの呼び出し間で同じであることです。コマンドラインでコードを実行すると、これを確認できます。

<ol class="dp-xml">
<li class="alt"><span><span>% php singleton.php  </span></span></li>
<li class="">
<span></span><span class="attribute">Handle</span><span> = </span><span class="attribute-value">Object</span><span> id #3  </span>
</li>
<li class="alt">
<span></span><span class="attribute">Handle</span><span> = </span><span class="attribute-value">Object</span><span> id #3  </span>
</li>
<li class=""><span>% </span></li>
</ol>

返された 2 つのハンドルは同じオブジェクトです。アプリケーション全体でデータベース接続の単一要素を使用すると、どこでも同じハンドルを再利用できます。グローバル変数を使用してデータベース ハンドルを保存できますが、このアプローチは小規模なアプリケーションにのみ適しています。大規模なアプリケーションでは、グローバル変数の使用を避け、オブジェクトとメソッドを使用してリソースにアクセスします。


www.bkjia.com本当http://www.bkjia.com/PHPjc/446469.html技術記事デザイン パターンは Java アーキテクトのみが対象であるという誤った考えを誰もが常に抱いてきました。実際、デザインパターンは誰にとっても非常に便利です。ここでは PHP の単一要素を紹介します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。