使用Yii 2遇到扩展异常的问题

时间:2014-12-10 13:15:47

标签: php yii exception-handling try-catch yii2

我正在使用Yii 2框架,并且它使用了许多扩展异常,我遇到了问题,我扔了UserException但最终被基地抓住了{ {1}}但我不确定为什么!?

代码:

Exception

try { //........ if ($reader->count() > 0) { if (!$already_active) { //..... } else { throw new UserException('You have already activated your account; you may continue to login.'); } } } catch (\Exception $e) { // User exception above is caught in here? } catch (UserException $e) { // Rethrow the exception throw $e; } 不应该传递给第二个User Exception并被其抓住吗?

2 个答案:

答案 0 :(得分:5)

来自http://php.net/manual/en/language.exceptions.php

  

当抛出异常时,不会执行语句后面的代码,PHP将尝试查找第一个匹配的catch块。

Exception的catch块将被执行,因为ExceptionUserException的父级,因此UserException类型的任何对象也属于Exception类型

因此,您应该重构代码,以便首先使用子类的catch块。在您的情况下,UserException应该是第一个。

答案 1 :(得分:2)

如果您查看UserException课程,可以看到:

class UserException extends Exception

因此,Exception具有更高的优先级。

但是你可以这样做:

//if something's wrong
throw new \yii\base\UserException('You have already activated your account; you may continue to login.');