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

时间:2015-03-13 13:35:38

标签: php oop namespaces psr-4

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

<?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 个答案:

答案 0 :(得分:21)

我不认为这样做会有任何语法上的错误,但我认为任何符合PSR-4标准的自动加载程序都无法找到不在其中的课程和&# #39;自己的专用文件,因为标准是类所属文件的名称与类本身的名称相同:

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

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

另一种方法是在另一个类中定义你想要的类。在调用任何new CustomExceptionN语句之前,您绝对肯定的文件将始终自动加载。在大多数情况下,您可能会发现,在使用Class1之前首先要确保自动加载Class2比仅仅遵循标准并在其中包含每个类更难以解决问题#39;自己的文件位于正确的命名空间路径。