我现在正在开发一个web应用程序。我决定在和try/catch-block 一起使用Exceptions。
不过;我使用PHP7在本地开发了,当我刚刚将应用程序上传到PHP5服务器时,所有这些异常都不再被捕获。相反,脚本执行会因为一个致命错误而停止。我读了一些关于PHP7异常的主要变化,但我发现的所有信息都非常模糊。
script -stop不是太大的问题,但是在这种情况下捕获和"修改"错误是非常重要的,因为脚本是由AJAX调用运行的,必须返回json格式的错误消息。
主要文件:try {
if (!$this->validateNonce($this->postParams['upload-nonce']))
throw new Exception('Upload failed because nonce could not be verified.');
new FloImage(
$this->postParams['basename'],
true,
$this->fileParams['uploadfile']
);
} catch (Throwable $e) {
echo json_encode(array('error' => $e->getMessage()));
die();
}
FloImage()
检查一些信息(名称,文件大小等),如果出现错误,则以这种方式抛出异常:
throw new Exception(_('My error message.'));
关于如何使try-catch块与PHP5工作的帮助将不胜感激!
Throwable
是PHP7中引入的一个接口。手册上写着:
Throwable是PHP 7中可以通过throw语句抛出的任何对象的基接口,包括Error和Exception。
因此,如果你想在PHP5中使用你的代码,你必须捕获Exception
本身。例如
try {
throw new Exception('Some exception');
}
catch ('Exception $e) // use the backslash to comply with namespaces
{
echo($e->getMessage());
die();
}
只要抛出的异常是从Exception
派生的,这就可以工作。例如
class SpecialException extends Exception {}
try {
throw new SpecialException('Some exception');
}
catch ('Exception $e) // use the backslash to comply with namespaces
{
echo($e->getMessage());
die();
}
可能您正在寻找set_error_handler(),它用于编写用户定义的错误处理函数。因此,在脚本执行的顶部设置错误处理程序。
不要忘记将restore_error_handler()放在脚本的末尾,以恢复之前的错误处理函数。
您可以在set_error_handler()函数中相应地恢复您的脚本。