ホームページ  >  記事  >  バックエンド開発  >  PHP 5.3 の名前空間: 使用したことがありますか? _PHP チュートリアル

PHP 5.3 の名前空間: 使用したことがありますか? _PHP チュートリアル

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

【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>
これで、別の PHP で使用できるようになります。このコードは次のようなものです:

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
  1. www.bkjia.com

本当

http://www.bkjia.com/PHPjc/446608.html

[php100 厳選翻訳] ネームスペースは PHP 5.3 での最も重要な変更です。C# および Java 開発者はこの用語に非常に慣れており、最終的に PHP アプリケーションの構造をより適切に変更できるようになります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。