无法捕获BadMethodCallException

时间:2012-11-21 13:31:41

标签: php exception try-catch fatal-error

以下是我的代码部分:

// ... code ...
$action = self::defineAction( $request->getPath() );
try {
    $response = Controller::$action( $request );
} catch( \BadMethodCallException $exception ) {
    Logger::logError( $exception );
    $response = new NotFoundResponse();
}
// ... code ...

我尝试捕获异常,如果出于某种意外,未实现具有已定义名称的控制器的操作或者错误地定义了名称。

但是我没有捕获异常,而是在Apache的错误日志中遇到致命错误:

PHP Fatal error:  Call to undefined method app\\Controller::testingAction() ...

如果我尝试在控制器的现有(已定义和可调用)操作中调用未定义的方法,我也无法捕获上述异常 - 而是发生致命错误:

PHP Fatal error:  Call to undefined method app\\SomeClass::someUndefinedMethod() in /********/Controller.php on line *** ...

用“\ Exception”替换“\ BadMethodCallException”没有任何效果:我一直在处理致命错误。

将“try-catch”块放在控制器的每个动作中都不适合我。

为什么不能以这种方式捕获异常?我该如何解决这个问题?

我正在运行PHP 5.3.8。

1 个答案:

答案 0 :(得分:3)

Catch块只能捕获抛出的异常,而不是错误。 Call to undefined method是一个错误,您需要对此进行测试并自行抛出异常。 Please see this了解异常和错误之间的差异。

您可以通过执行以下操作来测试方法是否存在:

if( !method_exists('app\Controller', 'testingAction') ) {
    throw new \BadMethodCallException();
}