以下是我的代码部分:
// ... 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。
答案 0 :(得分:3)
Catch块只能捕获抛出的异常,而不是错误。 Call to undefined method
是一个错误,您需要对此进行测试并自行抛出异常。 Please see this了解异常和错误之间的差异。
您可以通过执行以下操作来测试方法是否存在:
if( !method_exists('app\Controller', 'testingAction') ) {
throw new \BadMethodCallException();
}