我对目前正在开发的网络应用程序感到困惑。我决定更加谨慎地使用异常和try / catch-blocks 。
尽管如此;我使用PHP7 在本地开发,当我刚刚将应用程序上传到 PHP5服务器时,所有这些异常都不会被捕获。相反,脚本执行因致命错误而停止。我已经阅读了有关PHP7异常的重大变化,但我发现的所有信息都非常模糊。
脚本停止并不是一个问题,但在这种情况下捕获和“修改”错误非常重要,因为脚本是由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.'));
有关如何使用PHP5进行try-catch-block工作的帮助将不胜感激!提前谢谢你......
答案 0 :(得分:1)
Throwable
是PHP7中引入的接口。从它所说的manual:
Throwable是可以通过PHP 7中的throw语句抛出的任何对象的基本接口,包括错误和异常。
因此,如果您想在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();
}
答案 1 :(得分:0)
可能您正在寻找用于编写用户定义的错误处理函数的set_error_handler()。因此,将错误处理程序设置在脚本执行的顶部。
不要忘记将restore_error_handler()放在脚本的末尾以恢复以前的错误处理函数。
您可以在 set_error_handler()功能中相应地恢复脚本。