如何在php中使用异常(try,catch)?

时间:2016-08-01 14:38:23

标签: 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" . $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的工作原理是什么?

1 个答案:

答案 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();
       }
     }
}