PHPのuse
キーワード自体は、他のファイルを含めません。ステートメントで定義された名前空間use
が、現在のPHPファイルのさらに下のコードによって参照される可能性があることをPHPに通知するだけです。
ただし、ここで発生する可能性が高いのは、システムにautoload
関数が定義されていることです。関数があるautoload
場合、PHPは、認識できないクラス名に遭遇するたびにこの関数を呼び出します。このautoload
関数は、ロードするクラスファイルを検索し、見つかった場合はそれを含めます。これはおそらくエラーが発生している場所です。
最初のケースでは、これは一連のイベントです。
- ステートメントは
use
有効な名前空間を参照していますが、その名前空間のクラスがコードで参照されるまで、これは無視されます。
- クラスが参照されると、PHPは「このクラスはまだわかりません。自動ロードします」と言います。
- オートローダー機能が実行され、含めるパスが作成されます。これは通常、クラスの名前空間とクラス名に由来しますが、autoload関数が期待するように記述されているものであれば何でもかまいません。
- この場合、オートローダーがパスを構築してそのパスで実行
include()
しているように見えますが、オートローダーが期待する場所にクラスが存在しません。したがって、「ファイルが見つかりません」エラー。
2番目のケースでは、use
ステートメントを変更します。
- ステートメントは別の
use
名前空間を参照するようになりましたが、実際にクラスを参照するプログラムの後半でコードを変更していない可能性があります。
use
プログラムはクラスを呼び出すコードに到達しますが、ステートメントと一致しなくなったため名前空間を認識しないため、即座に致命的なエラーが発生します。