web-dev-qa-db-ja.com

同じファイル内の同じ名前空間で複数のクラスを使用することは可能ですか?

同じファイル内の同じ名前空間で複数のクラスを使用することは可能ですか?私はこのようなことをしたい:

<?php
  namespace MyNamespace\Helpers\Exceptions

  use Exception;

  class CustomException1 extends Exception{}

  class CustomException2 extends Exception{}

  class CustomException3 extends Exception{}

カスタム例外クラスごとに1つのファイルを使用しないようにします。問題は、別のクラスでカスタム例外の1つを使用しようとすると、

use MyNamespace\Helpers\Exceptions\CustomException1;

customException1クラスが見つかりません。何か案は?

17
Gligor Florin

これを行うことで構文的に問題があるとは思いませんが、 PSR-4 準拠のauotloaderは、標準以降、独自の専用ファイルにないクラスを見つけることができるとは思いません。クラスが属するファイルの名前は、クラス自体の名前と同じであるということです。

  1. 終了クラス名は、.phpで終わるファイル名に対応します。ファイル名は、終了クラス名の大文字と小文字を一致させる必要があります。

このため、このアプローチを使用する場合は、クラスを定義する必要があるときはいつでも(基本的に、これらの例外のいずれかをスロー/キャッチするときはいつでも)、そのクラスファイルを手動でincludeする必要があります。 )。

別の方法は、別のクラスのファイル内に必要なクラスを定義することです絶対に確実は、new CustomExceptionNの呼び出しの前に常に自動ロードされますステートメント。ほとんどの場合、標準に従い、適切な名前空間パスにある独自のファイルに各クラスを含めるよりも、Class1を使用する前に必ず最初にClass2を自動ロードすることを覚えておく方がはるかに面倒です。 。

23
Jeff Lambert