ホームページ >バックエンド開発 >PHPチュートリアル >クイック スタート: PHP アダプター パターンの簡単な紹介_PHP チュートリアル
PHP については学ぶ価値のあることがたくさんあります。ここでは、主に PHP アダプター モードについて紹介します。インターフェイスの変更は、プログラマーが (しぶしぶではあるが) 受け入れて対処しなければならない一般的な問題です。プログラムプロバイダーはコードを変更し、さまざまなプログラミング言語や関連ライブラリが開発され、進化します。私の子供が持っている数多くのおもちゃの 1 つは、このジレンマを簡潔に表しています。自分の立場から外れている人を正当化することはできません。
質問
外部ライブラリのAPI変更によって引き起こされる不便をどのように回避しますか?ライブラリを作成した場合、API を変更した場合でも、ソフトウェアの既存ユーザーが正常にアップグレードできる方法を提供していただけますか?ニーズに合わせてオブジェクトのインターフェイスをどのように変更すればよいでしょうか?
ソリューション
注: コントロール ボディ パターン
PHP アダプター パターンは、コントロール ボディ パターンの最新の例です。アダプターの構造はプロキシ サーバー (Proxy) とデコレータ (Decorator) の構造に似ていますが、それらの違いは、アダプター (Adapter) の目的が、カプセル化されたクラスであるプロキシのインターフェイスを変更することであることです。サーバー (Proxy) とデコレータ (Decorator) はインターフェイスを変更しないままにします。
サンプルコード
APIが変更されたときにアプリケーションが影響を受けないように保護する方法を見てみましょう。適切なライブラリを懸命に探し、最終的に、メッセージを送信するように設計された (仮説上の) コード セットである HwLib を見つけたとします。以下は引用された内容です:
<ol class="dp-xml"> <li class="alt"><span><span>// PHP4 </span></span></li> <li class=""><span>/** </span></li> <li class="alt"><span>* the HwLib helps programmers everywhere write their first program </span></li> <li class=""><span>* @package HelloWorld </span></li> <li class="alt"><span>* @version 1 </span></li> <li class=""><span>*/ </span></li> <li class="alt"><span>class HwLib { </span></li> <li class=""><span>/** </span></li> <li class="alt"><span>* Say “Hello” </span></li> <li class=""><span>* @deprec this function is going away in the future </span></li> <li class="alt"><span>* @return string </span></li> <li class=""><span>*/ </span></li> <li class="alt"><span>function hello() { </span></li> <li class=""><span>return ‘Hello ‘; </span></li> <li class="alt"><span>} </span></li> <li class=""><span>/** </span></li> <li class="alt"><span>* target audience </span></li> <li class=""><span>* @return string </span></li> <li class="alt"><span>*/ </span></li> <li class=""><span>function world() { </span></li> <li class="alt"><span>return ‘World!’; </span></li> <li class=""><span>} </span></li> <li class="alt"><span>} </span></li> </ol>
以下はライブラリ操作の例です:
<ol class="dp-xml"> <li class="alt"><span><span>$</span><span class="attribute"><font color="#ff0000">hw</font></span><span> =& new HwLib; </span></span></li> <li class=""> <span>echo $hw-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>hello(), $hw-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>world(); </span> </li> </ol>
HwLib には完全なドキュメントがあります。このドキュメントの中で、作成者は、hello() メソッドは将来のバージョンではサポートされない (または削除される) と明確に述べています。次に、HwLib の第 2 バージョンがリリースされたとします。新しいgreet()メソッドがhello()を置き換えます。このライブラリの新しいバージョンは次のとおりです (コメントは抽出されています):
<ol class="dp-xml"> <li class="alt"><span><span>// version 2 </span></span></li> <li class=""><span>class HwLib { </span></li> <li class="alt"><span>function greet() { </span></li> <li class=""><span>return ‘Greetings and Salutations ‘; </span></li> <li class="alt"><span>} </span></li> <li class=""><span>function world() { </span></li> <li class="alt"><span>return ‘World!’; </span></li> <li class=""><span>} </span></li> </ol>