我是PHP的初学者。到目前为止,从我学习的来源,触发异常的唯一机制是写一条引发它的行。
throw new Exception('message')
此外,在下面的代码中,不会抛出任何异常,但会引发错误。
try
{
$file = fopen('no such file.txt', 'r');
}
catch(Exception $e)
{
echo 'Exception: ' . $e->getMessage();
}
请给我一些解释。 看起来这个try..catch块在PHP中并不那么有用,与Java或.NET不同。
答案 0 :(得分:3)
按照惯例,PHP内核中的函数不会抛出异常(唯一的例外是构造函数可能会抛出异常,因为没有其他方法可以正确地指示错误条件)。
一些差异:
E_WARNING
,E_STRICT
,E_NOTICE
,...)。答案 1 :(得分:2)
“错误”仍然是来自php的pre-oop时代,并且在现代代码中确实几乎没用。幸运的是,您可以(实际上,必须)自动将大多数“错误”转换为异常。神奇就像这样
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
一旦你有了这个,你的“fopen”片段将按预期工作。有关详细信息/讨论,请参阅http://php.net/manual/en/class.errorexception.php。
答案 2 :(得分:0)
在这种特定情况下没用,因为fopen()
在遇到错误时不会抛出异常。我认为没有核心功能可以做到。
如果您习惯使用异常并希望与它们保持一致,我认为没有任何反对使用ErrorException
类将所有错误转换为异常的说法。
但是,fopen()
在无法打开文件时只会引发E_WARNING
,所以在您的示例中,最简单的方法是测试$file
是false
是否为file_exists()
看操作是否失败。
我个人也喜欢在fopen()
之前做{{1}},如果文件丢失,也会做出相应的反应。