php 異常處理

<?php
$filename = 'test.txt';
try {
    if (!file_exists($filename)) {
      throw new Exception('文件不存在');
    }
} catch(Exception $e) {
    echo $e->getMessage();
}

從PHP5開始,PHP支持異常處理,異常處理是面向對象一個重要特性,PHP代碼中的異常通過throw拋出,異常拋出之后,后面的代碼將不會再被執行。

1、基本語法
try{
//可能出現錯誤或異常的代碼
//catch表示捕獲,Exception是php已定義好的異常類
} catch(Exception $e){
//對異常處理,方法:
//1、自己處理
//2、不處理,將其再次拋出
}
2、處理處理程序應當包括:
Try - 使用異常的函數應該位于 "try" 代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。
Throw - 這里規定如何觸發異常。注意:每一個 "throw" 必須對應至少一個 "catch",當然可以對應多個"catch"
Catch - "catch" 代碼塊會捕獲異常,并創建一個包含異常信息的對象。

異常處理類

PHP具有很多異常處理類,其中Exception是所有異常處理的基類。

Exception具有幾個基本屬性與方法,其中包括了:

message 異常消息內容
code 異常代碼
file 拋出異常的文件名
line 拋出異常在該文件的行數

其中常用的方法有:

getTrace 獲取異常追蹤信息
getTraceAsString 獲取異常追蹤信息的字符串
getMessage 獲取出錯信息

如果必要的話,可以通過繼承Exception類來建立自定義的異常處理類。

//自定義的異常類,繼承了PHP的異常基類Exception
class MyException extends Exception {
    function getInfo() {
        return '自定義錯誤信息';
    }
}

try {
    //使用異常的函數應該位于 "try"  代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。
    throw new MyException('error');//這里規定如何觸發異常。注意:每一個 "throw" 必須對應至少一個 "catch",當然可以對應多個"catch"
} catch(Exception $e) {//"catch" 代碼塊會捕獲異常,并創建一個包含異常信息的對象
    echo $e->getInfo();//獲取自定義的異常信息
    echo $e->getMessage();//獲取繼承自基類的getMessage信息
}

獲取錯誤發生的所在行

<?php
try {
    throw new Exception('wrong');
} catch(Exception $ex) {
    $msg = 'Error:'.$ex->getMessage()."\n";
    $msg.= $ex->getTraceAsString()."\n";
    $msg.= '異常行號:'.$ex->getLine()."\n";
    $msg.= '所在文件:'.$ex->getFile()."\n";
    //將異常信息記錄到日志中
 PHP異常處理之   file_put_contents('error.log', $msg);
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 異常(Exception)用于在指定的錯誤發生時改變腳本的正常流程。 什么是異常? PHP 5 提供了一種新的面向...
    josephok閱讀 586評論 0 7
  • 異常與錯誤的區別 關于異常處理這一塊,在官方的手冊上介紹的不夠詳細,所以我在這里再做一個相對詳細一點的總結...
    四月不見閱讀 2,288評論 0 14
  • 本文介紹php開源庫BooBoo,是一個處理php異常和錯誤的開源庫,通過簡單的分析代碼,我們知道了實際項目中怎么...
    小聰明李良才閱讀 777評論 0 6
  • 10.2.1 PHP異常處理1 異常(Exception)處理用于在指定的錯誤發生時改變腳本的正常流程。是PHP5...
    曹淵說創業閱讀 357評論 0 0
  • 【介紹】zooKeeper是一個[分布式]的,開放源碼的[分布式應用程序]協調服務,是Hadoop和Hbase的重...
    先生_呂閱讀 271評論 0 0