Zend framework 异常的子名称空间

Zend framework 异常的子名称空间,zend-framework,namespaces,zend-framework2,symfony,Zend Framework,Namespaces,Zend Framework2,Symfony,在PHP中,我经常看到异常通常被隔离在子命名空间中 这在流行的框架中发生 例如: 1) Symfony 2、Symfony 3: 名称空间Symfony\Component\Console\Exception 名称空间Symfony\Component\Config\Exception 名称空间Symfony\Component\Form\Exception 等等 甚至在以下章节中也有描述: 异常类应存储在异常子命名空间中 2) Zend Framework 2: 名称空间Zend\For

在PHP中,我经常看到异常通常被隔离在子命名空间中

这在流行的框架中发生

例如:

1) Symfony 2、Symfony 3:

  • 名称空间Symfony\Component\Console\Exception
  • 名称空间Symfony\Component\Config\Exception
  • 名称空间Symfony\Component\Form\Exception
  • 等等
甚至在以下章节中也有描述:

异常类应存储在异常子命名空间中

2) Zend Framework 2

  • 名称空间Zend\Form\Exception
  • 名称空间Zend\Ldap\Exception
  • 名称空间Zend\Di\Exception
  • 等等
3) PHP-DI

  • 名称空间DI \定义\异常
几年前,我遵循了这种做法(异常情况下使用子名称空间)。 我甚至没有把这个决定作为行业领导者来考虑。 我只是照做了

但现在我在考虑这个决定,它似乎对我不合适

现在在我看来,异常应该与引起它的类位于同一命名空间中

你觉得这个怎么样?以下哪一个更好(为什么)

  • Symfony\Component\Console\Exception\CommandNotFoundException

  • Symfony\Component\Console\CommandNotFoundException

根据PSR-0,这是存储异常的最佳方式

这是因为根据一个类,不同情况下可以有10个以上的异常类。将它们与许多其他类存储在一个文件夹中可能会使开发人员陷入困境

假设您有一个文件夹,其中包含10个实现业务逻辑的类和100个异常类。你会很容易找到特定的课程吗


另一个问题:您可能有两个名称相同但与不同问题相关的异常:例如,您可以创建
NotFoundException
,告知控制器需要返回
404
HTTP状态代码,但它也可以告知未找到某些文件。

1)PSR-0不包含此类信息。其他PSR不包含太多。2) PSR-3默认异常:PSR\Log\InvalidArgumentException 3)10个类和100个异常-这种情况太牵强。PSR-0声明“从文件系统加载时,每个命名空间分隔符都转换为目录分隔符。”。这意味着具有一个命名空间的所有文件都必须位于一个文件夹中。您不理解这个问题。问题是这样更好:Symfony\Component\Console\Exception\CommandNotFoundException或Symfony\Component\Console\CommandNotFoundException。为什么?你不明白我的答案。我写道,在第二种情况下,根据PSR-0,您的所有异常都将位于一个文件夹中。因此,对于所有异常和一个文件夹中的许多文件,您都有非常具体的名称。开发人员在许多文件中查找一个类是不方便的。实际上,试着从一百个类(文件)中找到一个具体的类。