是否可以在同一文件中使用同一名称空间下的多个类

Gli*_*rin 17 php oop namespaces psr-4

是否可以在同一个文件夹中使用同一名称空间下的多个类?我想做这样的事情:

<?php
  namespace MyNamespace\Helpers\Exceptions

  use Exception;

  class CustomException1 extends Exception{}

  class CustomException2 extends Exception{}

  class CustomException3 extends Exception{}
Run Code Online (Sandbox Code Playgroud)

避免为每个自定义异常类使用一个文件.问题是,当我尝试在另一个类中使用其中一个自定义异常时,

use MyNamespace\Helpers\Exceptions\CustomException1;
Run Code Online (Sandbox Code Playgroud)

找不到CustomException1类.有任何想法吗?

Jef*_*ert 23

我不认为这样做会有任何语法上的错误,但我不认为任何符合PSR-4标准的自动加载程序都能找到一个不属于它自己的专用文件的类,因为标准是文件的名称类所属的类与类本身的名称相同:

  1. 终止类名对应于以.php结尾的文件名.文件名必须与终止类名称的大小写相匹配.

因此,如果要使用此方法,则必须在include需要定义这些类时手动确保该类文件(基本上,只要您想要抛出/捕获任何这些异常).

另一种方法是在任何调用任何语句之前定义您想要在另一个类文件中的类,您绝对可以确定该文件将自动加载new CustomExceptionN.您可能会发现在大多数情况下,尝试记住首先确保Class1在使用之前自动加载Class2比仅遵循标准并将每个类包含在位于适当命名空间路径的自己的文件中要困难得多.