你如何定义例外?

时间:2011-04-28 11:20:59

标签: php exception exception-handling

我已经习惯了Zend Framework,当你编写自己的组件时,你会创建它自己的Exception文件,但是基于每个文件,你就有了这样的结构:

Zend/View/Exception.php
Zend/View/Helper/Exception.php
Zend/View/Renderer/Exception.php

我很好,我也使用Doctrine2和Exception以不同的方式“存储”

类似(以Zend方式)

并在Zend/View/Exception.php

class Exception {

public static function invalidArguement() {
   return new self('Invalid arguement was given, etc..');
}

据我所知,第二种方法不够灵活,但更准确,因为它会根据错误抛出异常。

第一种方法只是一种能够使用自定义消息抛出Zend_View_Exception的方法。

另外,每个Exception文件的例外情况如何。

与以下结构类似:

Exception/InvalidArguement.php
Exception/AuthentificationFailed.php
Exception/QuantityLimit.php

有最佳做法吗?任何利弊?

2 个答案:

答案 0 :(得分:0)

我从来没有使用Zend框架,但如果这对我有帮助,我至少会创建一个共同的Exception类,而所有其他的扩展它,而不是只为每个类创建一个。

答案 1 :(得分:0)

对我而言,最佳做法是对与其问题相关的例外进行分组。

例如,如果您有许多Auth例外,例如 InvalidDetails UserNotFound 将它们放在这里

  • 库/认证/异常/ InvalidDetails.php
  • 库/认证/异常/ UserNotFound.php

每个异常应该是Zend_Exception的扩展(除非你自己扩展它)

这样你可以做到:

throw new Library_Auth_Exception_InvalidDetails("Invalid details when trying to login");

使用此方法的好处是你不需要有消息,Exception名称可以覆盖它。

我的假设是你为Library设置一个名为Library的命名空间,一切都在那里。

我倾向于将所有内容分组,因此典型的Auth库可能是:

  • 认证/形式/ login.php中
  • 认证/异常/ InvalidUser.php
  • 认证/奥姆/ Abstract.php
  • 认证/奥姆/ Doctrine.php

HTH