名前空間とは何ですか? 「大まかに言えば、名前空間は物事をカプセル化する方法です。この抽象的な概念はさまざまな場所で見ることができます。たとえば、オペレーティング システムでは、ディレクトリは関連ファイルをグループ化するために使用されます。ディレクトリ内のファイルの場合、名前空間は、たとえば、ファイル foo.txt はディレクトリ /home/greg と /home/other に同時に存在できますが、foo.txt ファイルにアクセスする場合、同じディレクトリに 2 つの foo.txt ファイルが存在することはできません。ディレクトリ /home/greg の外側では、/home/greg/foo.txt を取得するために、ファイル名の前にディレクトリ名とディレクトリ区切り文字を置く必要があります。この原則は、名前空間としてプログラミングの分野に適用されます。」 - 名前空間の概念。
本質的に、名前空間はコンテナです。このコンテナにクラス、関数、変数を入れることができ、同じ名前空間内で相互に無条件にアクセスできます。名前空間の外側で、他の名前空間に含まれる項目を呼び出すには、他の名前空間を参照またはインポートする必要があります。
名前空間の概念はシェルにおけるファイルディレクトリの概念と同じです。現在のディレクトリ内のすべてのファイルには、ファイル名によって直接アクセスできます。他のディレクトリ内のファイルにアクセスする必要がある場合は、相対パスまたは絶対パスを入力する必要があります。
引用方法:
インポート方法:
リーリーインポートは、ターゲットクラスを現在の名前空間にコピーすることと同じです。
名前空間の存在は、次の 2 つの問題を解決するためにあります:
1. ユーザーが作成したコードと、PHP の内部クラス/関数/定数またはサードパーティのクラス/関数/定数の間に名前の競合があります。
2. ソースコードの可読性を向上させるために、非常に長い識別子名(通常、最初の種類の問題を軽減するために定義される)のエイリアス(または短い)名を作成します。
1. 同じ空間内のクラスはお互いを直接呼び出し、同じファミリーに属します。たとえば、Laravel の PageController クラスでは、Page::all() のようなコードを直接記述して Page モデルを呼び出すことができます。これは、どちらもトップレベルの名前空間の下にあるためです。
2. クラスがトップレベル以外の名前空間に存在する場合、そのクラスは現在の名前空間にある他のクラスを「参照」または「インポート」せずに呼び出すことしかできません。それらは同じファミリーに属しています。サブネームスペースはすべて別のネームスペース、別のコンテナであり、コンテナ間の関係以外に特別な関係はありません。
3. Laravel はクラスマップメソッドを使用して自動読み込み (autoload) を行います。PHP には名前空間という高度な機能がありますが、これは論理的な関係にすぎず、require ファイルは依然として必要です。このクラスとファイルの対応関係は /vendor/composer/autoload_classmap.php に存在し、composer dump-autoload は毎回再コンパイルされて生成されます。