异常的子命名空间

时间:2016-05-03 05:34:19

标签: zend-framework namespaces zend-framework2 symfony

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

这种情况正在流行的框架中发生。

例如:

1) Symfony 2,Symfony 3:

  • 命名空间Symfony \ Component \ Console \ Exception;
  • namespace Symfony \ Component \ Config \ Exception;
  • 命名空间Symfony \ Component \ Form \ Exception;
  • 等...

即使在Best Practices

中也会对此进行描述
  

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

2) Zend Framework 2

  • 命名空间Zend \ Form \ Exception;
  • 命名空间Zend \ Ldap \ Exception;
  • 命名空间Zend \ Di \ Exception;
  • 等...

3) PHP-DI

  • 命名空间DI \ Definition \ Exception;

几年前,我遵循了这种做法(例外的子命名空间)。 我甚至没有把这个决定当作Symfony,Zend--行业领导者。 我刚刚效仿。

但现在我正在考虑这个决定,而且似乎对我不对。

现在在我看来,异常应该与导致它的类在同一名称空间中。

您如何看待这个?哪个更好(以及为什么)?

  • 的Symfony \元器件\控制台\异常\ CommandNotFoundException

OR

  • 的Symfony \元器件\控制台\ CommandNotFoundException

1 个答案:

答案 0 :(得分:1)

根据PSR-0,这是存储例外的最佳方式。

这是因为根据一个类,您可以针对不同的案例拥有10个以上的异常类。将它们存储在一个包含许多其他类的文件夹中会使开发人员陷入困境。

想象一下,你有10个实现业务逻辑的类的文件夹和100个Exception类。你找到一些特定的课程会很容易吗?

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