Php Can';无法捕获BadMethodCallException
以下是我的代码部分:Php Can';无法捕获BadMethodCallException,php,exception,try-catch,fatal-error,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 NotFound
// ... 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 *** ...
将“\BadMethodCallException”替换为“\Exception”无效:我保留获取致命错误
将“try-catch”块放在控制器的每个动作中并不是我可以接受的解决方案
为什么不能以这种方式捕获异常?我怎样才能解决这个问题
我正在运行PHP5.3.8。Catch块只能捕获抛出的异常,而不能捕获错误<代码>调用undefined方法是一个错误,您需要对此进行测试并自己抛出异常。查看异常和错误之间的差异 您可以通过执行以下操作来测试方法是否存在:
if( !method_exists('app\Controller', 'testingAction') ) {
throw new \BadMethodCallException();
}
如果是这样,PHP本机“BadMethodCallException”类的特殊含义是什么?只能通过这种简单的方式抛出它吗?是的,它在PHP的SPL中,工作原理类似于
\Exception
,只允许您更具体地处理异常,而无需自己定义类。请注意,您可以设置一个错误处理程序,将PHP错误转换为异常。下面是一个关于