异常(try,catch)在php中是如何工作的?
我不知道异常是如何工作的。我认为,它们应该避免php错误并显示“我的错误消息”。例如,我想打开文件异常(try,catch)在php中是如何工作的?,php,exception,try-catch,Php,Exception,Try Catch,我不知道异常是如何工作的。我认为,它们应该避免php错误并显示“我的错误消息”。例如,我想打开文件 class File{ public $file; public function __construct($file) { try{ $this->file = fopen($file,'r'); } catch(Exception $e){ echo "some error" .
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');
它起作用了。现在我故意将文件名text.txt
更改为tex.txt
,只是为了查看catch块中的错误消息,但是php给出了一个错误警告:fopen(/var/www/html/OOP/text.txt):无法打开流:第169行的/var/www/html/OOP/file.php中没有这样的文件或目录。所以这是php错误,它不显示来自catch块的错误消息。我做错了什么?try/catch究竟是如何工作的?来自PHP手册
如果打开失败,将生成E_级警告错误。你可以
使用@可取消显示此警告
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();
}
}
}
因为“警告”不是错误。您只能捕获实际抛出的异常。因此,对于本例,您必须编写自己的验证代码,以确认您确实打开了一个文件。请阅读此处如何“捕获”警告:并非每个PHP语句/函数都会抛出异常。你只能听懂别人说的话,谢谢你的回复。你能告诉我,如果我必须添加@
并且还要检查false/null如果(!$this->file)
那么使用try-catch有什么意义?似乎我可以在没有try-catch的情况下使用if
操作符检查文件,结果是一样的@მაზა ფაკა 如果需要,try{}catch
块可以在类之外,但是要使用的if()
不能在类之外。深入阅读主题ExceptionHandling,ExceptionTypes UserDefinedExceptions:-)try catch
块应该在类之外使用,在抛出异常的方法中它是非常无用的。我认为我应该更深入地了解异常的工作原理。谢谢你们