在同一个命名空间和同一个文件中使用多个类是否可行?

23

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

<?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个回答

31

我认为在语法上这样做没有任何问题,但是我不认为任何遵守 PSR-4 标准的自动加载器将能够找到一个不在其专用文件中的类,因为标准规定一个类所属的文件名与类本身的名称相同:

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

因此,如果您想使用这种方法,您将需要手动 include 该类文件,并确保在需要定义这些类时(基本上,每当您想要抛出/捕获其中任何一个异常时)手动引入。

另一种选择是在您 绝对确定 在调用任何 new CustomExceptionN 语句之前,总是会自动载入某个类文件的情况下,将您想要的类定义在另一个类文件内。在大多数情况下,您可能会发现,记住首先确保自动加载 Class1,然后再使用 Class2 要麻烦得多,而且最好还是遵循标准,将每个类都包含在其自己的文件中,并放置在正确的命名空间路径中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接