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

Posted

技术标签:

【中文标题】是否可以在同一个文件中使用同一个命名空间下的多个类【英文标题】:Is it possible use multiple classes under the same namespace, in the same file 【发布时间】:2015-05-16 00:24:55 【问题描述】:

?我想做这样的事情:

<?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 的自动加载程序都无法找到不在其自己的专用文件中的类,因为标准是名称类所属文件的名称与类本身的名称相同:

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

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

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

【讨论】:

以上是关于是否可以在同一个文件中使用同一个命名空间下的多个类的主要内容,如果未能解决你的问题,请参考以下文章

在其他命名空间中使用多个类

c#里一个文件夹下可以添加多个命名空间和类名相同的类么

封装 继承

面向对象思想

面向对象思想

PHP命令空间namespace及use的用法实践总结