我不确切知道异常是如何工作的。我认为,他们应该避免PHP错误并显示“我的错误消息”。例如,我想打开文件
class File{
public $file;
public function __construct($file)
{
try{
$this->file = fopen($file,'r');
}
catch(Exception $e){
echo "some error" . $e->getMessage();
}
}
}
$file = new File('/var/www/html/OOP/texts.txt');
它有效。现在我故意将文件名texts.txt
更改为tex.txt
只是为了看到来自我的catch块的错误消息,而是php给出错误Warning: fopen(/var/www/html/OOP/texts.txt): failed to open stream: No such file or directory in /var/www/html/OOP/file.php on line 169
。所以它是php错误,它不会显示来自catch块的错误消息。我究竟做错了什么? try / catch的工作原理是什么?
答案 0 :(得分:1)
从PHP手册
如果打开失败,则会生成级别为E_WARNING的错误。你可以 使用@来抑制此警告。
fopen
在出错时返回FALSE,因此您可以测试该值并抛出将被捕获的异常。一些本机PHP函数会生成异常,其他则会引发错误。
class File{
public $file;
public function __construct($file){
try{
$this->file = @fopen($file,'r');
if( !$this->file ) throw new Exception('File could not be found',404);
} catch( Exception $e ){
echo "some error" . $e->getMessage();
}
}
}