PHPネーミング空間の概念解析

2078 ワード

1.PHPのネーミングスペースは何ですか?
ネーミングスペースとは?「一般的には、ネーミングスペースは物事をカプセル化する方法です.このような抽象的な概念は多くの場所で見られます.たとえば、オペレーティングシステムでは、ディレクトリが関連ファイルをグループ化するために使用され、ディレクトリ内のファイルにとってネーミングスペースの役割を果たします.具体的には、ファイルfoo.txtは、ディレクトリ/home/gregと/home/otherの両方で使用できます.存在しますが、同じディレクトリに2つのfoo.txtファイルは存在しません.また、ディレクトリ/home/gregがfoo.txtファイルに外部アクセスする場合は、ディレクトリ名およびディレクトリセパレータをファイル名の前に置いて/home/greg/foo.txtを得る必要があります.この原理をプログラム設計の分野に適用することがネーミングスペースの概念です.」-ネームスペースの概要
  2.PHPネーミングスペースはどのように理解しますか?
本質的には、ネーミングスペースはクラス、関数、変数を入れることができ、同じネーミングスペース内で無条件に相互にアクセスすることができます.これらのアイテムを呼び出すには、ネーミングスペース以外のネーミングスペースを参照またはインポートする必要があります.
ネーミングスペースはshellのファイルディレクトリの概念と同じです.現在のディレクトリでは、すべてのファイルに直接ファイル名でアクセスできます.他のディレクトリのファイルにアクセスする必要がある場合は、相対パスまたは絶対パスを入力する必要があります.参照方法:
namespace foo;

 class Foo {   

         public function foo()   

             {        

                  return \top
amespace\bar\Bar::fuck(); } }

インポート方法:
namespace foo; 

use top
amespace\bar\Bar; class Foo { public function foo() { return Bar::fuck(); } }

インポートは、目的クラスを現在のネーミングスペースにコピーすることに相当します.
  3.PHPネーミングスペースにはどのような実用的な応用がありますか?
ネーミングスペースの存在は、次の2つの問題を解決するためです.
  1.ユーザが作成したコードは、PHP内部のクラス/関数/定数またはサードパーティのクラス/関数/定数と名前が競合します.
  2.長い識別子名(通常は第1の問題を緩和するために定義される)の別名(または短い)の名前を作成し、ソースコードの可読性を向上させます. 
 4.いくつかのtips
  1.同じ空間の下のクラスは直接相互に直接呼び出され、1つの家に属します.たとえばLaravelのPageControllerクラスでは、Page::all()のようなコードを直接書くことで、Pageというモデルを呼び出すことができます.彼ら2人はトップネームスペースの下にいるからです.
  2.クラスがトップレベル以外のネーミングスペースに存在する場合は、リファレンスまたはインポートを使用せずに、同じ現在のネーミングスペースの下にある他のクラスを呼び出すことができます.任意のサブネーミング空間は別のネーミング空間であり、別のコンテナは、コンテナ間の関係以外の特別な関係はありません.
  3.Laravelはclassmap方式で自動ロード(autoload)を行い、PHPはネーミングスペースという高度な特性を持っているが、これは論理関係にすぎず、requireファイルはまだある.このクラスとファイルの対応関係は/vendor/composer/autoload_にあります.classmap.phpでは、composer dump-autoloadのたびに再コンパイル、生成されます.