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


Is it possible use multiple classes under the same namespace, in the same file

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

<?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 类。有什么想法吗?

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

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

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

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