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

2022-08-30 20:00:42

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

<?php
  namespace MyNamespace\Helpers\Exceptions

  use Exception;

  class CustomException1 extends Exception{}

  class CustomException2 extends Exception{}

  class CustomException3 extends Exception{}

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

use MyNamespace\Helpers\Exceptions\CustomException1;

找不到 CustomException1 类。有什么想法吗?


答案 1

我不认为这样做在语法上有什么问题,但我不认为任何符合PSR-4标准的auotloaders都能够找到一个不在它自己的专用文件中的类,因为标准是一个类所属的文件的名称与类本身的名称相同:

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

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

另一种方法是定义要在另一个类的文件内使用的类,您绝对确定这些类将始终在调用任何语句之前自动加载。您可能会发现,在大多数情况下,尝试记住在使用之前首先确保自动加载要比遵循标准并将每个类包含在位于正确命名空间路径的自己的文件中要麻烦得多。new CustomExceptionNClass1Class2


答案 2

推荐