ホームページ  >  記事  >  php教程  >  PHP 5.3 の名前空間: 使用したことがありますか?

PHP 5.3 の名前空間: 使用したことがありますか?

WBOY
WBOYオリジナル
2016-06-21 08:51:03901ブラウズ

ネームスペースは PHP 5.3 での最も重要な変更です。C# および Java 開発者はこの用語によく慣れており、最終的に PHP アプリケーションの構造をより良いものに変更することができます。

なぜ名前空間が必要なのでしょうか?

PHP コード ベースが大きくなるにつれて、以前に定義した関数やクラス名を変更するリスクが高まります。コードに 2 つ以上のサードパーティ コンポーネントやプラグインを追加しようとすると、問題はさらに深刻になります。 set は「Database」クラスと「User」クラスを実装しますか?

これまでの唯一の解決策は、長いクラス/関数名を使用することでした。たとえば、WordPress では各クラス名と関数名の前に接頭辞「WP_」が使用され、Zend Framework では非常に説明的な命名規則が使用されるため、クラス名が非常に長くなります。 、たとえば:

Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive

名前の競合の問題は、名前空間を使用して解決でき、PHP の定数、クラス、関数を名前空間ライブラリに結合できます。

名前空間を定義するにはどうすればよいですか?

デフォルトでは、PHP が名前空間をサポートする前と同様に、すべての定数、クラス、関数名はグローバル空間に配置されます。

PHP ファイルの先頭にあるキーワード namespace を使用して名前空間を定義できます。これは最初のコマンドである必要があり (declare を除く)、その前に非 PHP コード、HTML、またはスペースを含めることはできません。例:


  1. 		< ?php  
  2. // このコードを「MyProject」名前空間で定義します
  3. 名前空間 MyProject
  4. // ... コード ...

この行の下のコードは MyProject 名前空間に割り当てられます。名前空間をネストしたり、同じコード ブロックに複数の名前空間を定義したりすることはできませんが、別の名前空間コードを定義することはできます。同じファイル内に次のように記述します:


  1. 		< ?php  
  2. 名前空間 MyProject1;
  3. // MyProject1 名前空間の PHP コード
  4. 名前空間 MyProject2;
  5. // MyProject2 名前空間の PHP コード
  6. // 代替構文
  7. 名前空間 MyProject3 {
  8. // MyProject3 名前空間の PHP コード
  9. }
  10. ?>
  11. これを行うことは可能ですが、混乱を避けるために、各ファイルに名前空間を 1 つだけ定義することをお勧めします。

サブネームスペース

PHP では、

のように、ライブラリをバックスラッシュ文字 () で区切ってサブネームスペースを分割できるように、階層的なネームスペースを定義できます。

◆MyProjectSubName

◆MyProjectDatabaseMySQL

◆会社名MyProjectLibraryCommonWidget1

名前空間コード

を呼び出す

lib1.php ファイルでは、AppLib1 名前空間を使用して、次のような定数、関数、クラスを定義します。

lib1.php


  1. // アプリケーション ライブラリ 1
    		< ?php  
  2. 名前空間 AppLib1;
  3. const MYCONST = 'AppLib1MYCONST'
  4. function MyFunction() {
  5. __FUNCTION__ を返します
  6. }
  7. クラス MyClass {
  8. 静的関数 WhoAmI() {
  9. __METHOD__ を返します
  10. }
  11. }
  12. ?>
  13. これで、このコードを次のような別の PHP ファイルに含めることができます:
  14. myapp.php


    header('コンテンツタイプ: text/plain');
  1. require_once('lib1.php');
    		< ?php  
  2. エコーAppLib1MYCONST .
  3. echo AppLib1MyFunction() .
  4. echo AppLib1MyClass::WhoAmI() .
  5. ?>
  6. myapp.php には名前空間が定義されていないため、このコードはグローバル空間に存在します。 MYCONST、MyFunction、および MyClass への直接参照は、 lib1.php のコードを呼び出すために失敗します。 AppLib1 名前空間の前にプレフィックスを追加して完全修飾名を定義できます。 myapp.php をロードしたときの出力は次のとおりです。
    
    
    1. 		App\Lib1\MYCONST    
    2. App\Lib1\MyFunction    
    3. App\Lib1\MyClass::WhoAmI 

    完全合格名称可以变得很长,定义长名称,如App-Lib1-MyClass,有一些明显的好处。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。