【php100 厳選翻訳】ネームスペースは PHP 5.3 での最も重要な変更点であり、C# および Java 開発者はこの用語に非常に慣れており、最終的に PHP アプリケーションの構造をより適切に変更できるようになります。
なぜ名前空間が必要なのでしょうか?
PHP コードベースが大きくなるにつれて、以前に定義された関数やクラス名を変更するリスクが高まります。サードパーティのコンポーネントやプラグインが 2 つまたは 2 つある場合、問題はさらに深刻になります。複数のコード セットが「データベース」クラスと「ユーザー」クラスを実装している場合?
これまで、唯一の解決策は長いクラス/関数名を使用することです。たとえば、WordPress はすべてのクラス名と関数名の前に接頭辞「WP_」を使用します。Zend Framework は非常に説明的な命名規則を使用するため、クラス名は非常に冗長になります。
Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive
名前の競合の問題は名前空間を使用して解決でき、PHP 定数、クラス、関数を名前空間ライブラリに結合できます。
名前空間を定義するには?
デフォルトでは、PHP が名前空間をサポートする前と同様に、すべての定数、クラス、関数の名前はグローバル空間に配置されます。
PHP ファイルの先頭にあるキーワード namespace を使用して名前空間を定義できます。これは最初のコマンド (declare を除く) である必要があり、その前に PHP 以外のコード、HTML、スペースを含めることはできません。例:
<ol class="dp-c"><li class="alt"><span><span>< ?php </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// define this code in the 'MyProject' namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN>namespace MyProject; </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// ... code ... </FONT></SPAN><SPAN> </SPAN></SPAN></LI></OL>
この行の下のコードは MyProject 名前空間に割り当てられています。実際にこれを行う場合、識別できるのは最後の名前空間だけですが、名前空間をネストしたり、複数の名前空間を定義したりすることはできません。同じファイル内に次のような異なる名前空間コードを定義します。
<OL class=dp-c><LI class=alt><SPAN><SPAN>< ?php </SPAN></SPAN><LI class=""><SPAN>namespace MyProject1; </SPAN><LI class=alt><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// PHP code for the MyProject1 namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>namespace MyProject2; </SPAN><LI class=""><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// PHP code for the MyProject2 namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// Alternative syntax </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN>namespace MyProject3 { </SPAN><LI class=""><SPAN> </SPAN><SPAN class=comment><FONT color=#008200>// PHP code for the MyProject3 namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN>?> </span></span></li></ol>
これを行うことは可能ですが、混乱を避けるために、各ファイルに 1 つの名前空間のみを定義することをお勧めします。
サブネームスペース
PHP では、次のように、サブネームスペースをバックスラッシュ文字 () で区切って階層型ネームスペースを定義できます。
電話する名前空間コードlib1.php ファイルでは、AppLib1 名前空間を使用して、次のような定数、関数、クラスを定義します。
lib1.php<ol class="dp-xml"><li class="alt"><span><span class="tag"><strong><font color="#006699"><</FONT></STRONG></SPAN><SPAN> ?php </SPAN></SPAN><LI class=""><SPAN>// application library 1 </SPAN><LI class=alt><SPAN>namespace AppLib1; </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>const </SPAN><SPAN class=attribute><FONT color=#ff0000>MYCONST</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>'AppLib1MYCONST'</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>function MyFunction() { </SPAN><LI class=""><SPAN> return __FUNCTION__; </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>class MyClass { </SPAN><LI class=""><SPAN> static function WhoAmI() { </SPAN><LI class=alt><SPAN> return __METHOD__; </SPAN><LI class=""><SPAN> } </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></font></strong></span><span> </span></span></li></ol>
myapp.php
<ol class="dp-xml"><li class="alt"><span><span class="tag"><strong><font color="#006699"><</FONT></STRONG></SPAN><SPAN> ?php </SPAN></SPAN><LI class=""><SPAN>header('Content-type: text/plain'); </SPAN><LI class=alt><SPAN>require_once('lib1.php'); </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>echo AppLib1MYCONST . "n"; </SPAN><LI class=""><SPAN>echo AppLib1MyFunction() . "n"; </SPAN><LI class=alt><SPAN>echo AppLib1MyClass::WhoAmI() . "n"; </SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></font></strong></span><span> </span></span></li></ol>
myapp.php には名前空間が定義されていないため、このコードはグローバル空間に存在します。これらは AppLib1 に存在するため、MYCONST、MyFunction、および MyClass への直接参照は失敗します。 lib1.php のコードを呼び出すには、AppLib1 名前空間の前にプレフィックスを追加して、完全修飾名を定義します。myapp.php をロードしたときの出力は次のとおりです。非常に長いので、App-Lib1-MyClass のような長い名前を定義すると、明らかな利点がいくつかあります。
原文:
How to Use PHP Namespaces, Part 1: The Basics著者:
Craig Buckler
http://www.bkjia.com/PHPjc/446608.html