【文档说明】PHP的例外与错误处理课件.ppt,共(22)页,265.501 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45185.html
以下为本文档部分文字说明:
第8章PHP的例外與錯誤處理8-1PHP的錯誤處理8-2PHP5的例外處理8-1PHP的錯誤處理8-1-1PHP錯誤處理的基礎8-1-2exit()與die()的錯誤處理8-1-3自訂PHP的錯誤處理函數8-1-4產生使用者的自訂錯誤8-1PHP的錯誤處理PHP程式的錯誤(Erro
rs)是指程式執行前直譯過程的錯誤,或直譯後執行程式時產生的錯誤,主要分為兩種:•環境錯誤(EnvironmentalErrors):環境錯誤也稱為外部錯誤(ExternalErrors),這是指程式執
行環境所導致的錯誤,並不是程式設計的問題。例如:沒有權限無法寫入檔案,或檔案不存在。•程式錯誤(ProgrammingErrors):程式錯誤是程式中的臭蟲(Bugs),可能是語法錯誤、語意錯誤或程式邏輯錯誤(LogicalErrors)。8-1-1PHP錯誤處
理的基礎-說明錯誤處理(ErrorHandling)是一種處理錯誤的機制,可以處理直譯過程的語法和語意錯誤,或執行時的環境錯誤和程式錯誤中的邏輯錯誤。PHP在4.0版之前即提供內建的錯誤處理機制,當錯誤產生時,可以顯示各種不同的PHP錯誤訊息。8-1-1PHP錯誤
處理的基礎-範例例如:執行Ch8-1-1.php程式,因為require插入檔案不存在的環境錯誤,在執行時就會顯示PHP錯誤訊息:8-1-1PHP錯誤處理的基礎-四種錯誤等級ParseErrors:剖析錯誤是指PHP程式碼的語法和語意錯誤,這是執行前,直譯過程產生
的錯誤。FatalErrors:致命錯誤是很嚴重的執行時錯誤,它會導致PHP程式碼終止執行。Warnings:警告錯誤是一種尚能補救且非致命的執行時錯誤,PHP引擎會試圖繼續執行PHP程式碼。Notices:注
意錯誤是一種小且非致命的錯誤,只是用來提醒程式碼可能出現的錯誤。例如:沒有初始變數值。8-1-2exit()與die()的錯誤處理-方式基本的錯誤處理方式有:•不理會•終止程式顯示錯誤訊息•寫入記錄檔•使用自訂
錯誤處理進行補救8-1-2exit()與die()的錯誤處理-說明PHP程式最簡單的錯誤處理就是使用exit()或die()終止程式執行和顯示一段錯誤訊息。exit()與die()並不是真正的函數,它是PHP的語言建構子(LanguageConstruct),例如:使用PHP的
fopen()函數開啟檔案:$fp=@fopen($filename,"r")//開啟檔案orexit("錯誤:檔案$filename開啟錯誤!<br>");8-1-3自訂PHP的錯誤處理-設定錯誤等級
PHP提供error_reporting()函數指定PHP程式需要回報的錯誤等級。換句話說,我們可以只回報所需錯誤,而隱藏其他不需要的錯誤:error_reporting(E_ERROR|E_WARNING|E_NOTICE);
PHP程式會回報E_ERROR、E_WARNING和E_NOTICE三種錯誤等級。8-1-3自訂PHP的錯誤處理-錯誤等級常數錯誤等級常數說明E_ALL所有的錯誤和警告E_ERROR致命的執行時錯誤E_WARNING非致
命錯誤的執行時警告錯誤E_PARSE直譯時的程式碼剖析錯誤E_NOTICE執行時的注意錯誤E_CORE_ERROR在PHP引擎啟動時產生的致命錯誤E_CORE_WARNING在PHP引擎啟動時產生的警告錯誤E_COMPILE_ERROR致命的編譯時錯誤E_COMPILE_WAR
NING致命的編譯時警告錯誤E_USER_ERROR使用者產生的錯誤訊息E_USER_WARNING使用者產生的警告訊息E_USER_NOTICE使用者產生的注意訊息8-1-3自訂PHP的錯誤處理-指定錯誤處理函數在PHP程式可以使用set_error_hand
ler()函數指定一個函數作為錯誤處理:set_error_handler('myErrorHandler');上述程式碼指定參數的函數名稱為錯誤處理函數,即myErrorHandler()函數。8-1-3自訂PHP的錯誤處理-錯誤處理函數functionmyErrorHandle
r($type,$msg,$file,$line){switch($type){caseE_ERROR:echo“<b>…<br>";break;caseE_WARNING:echo"<b>…<br>";
break;caseE_NOTICE:echo"<b>…<br>";break;}//顯示錯誤訊息,寫入記錄檔案}8-1-3自訂PHP的錯誤處理-將錯誤訊息寫入記錄檔PHP程式的錯誤處理函數除了可以顯示錯誤訊息外,還可以呼叫error_log()函數將錯誤訊息寫入檔案:error_log($e
rr,3,"errors.log");函數第1個參數是錯誤訊息的字串,第2個參數是輸出種類的整數值:種類說明0寫入系統記錄檔1送到第3個參數的電子郵件地址3寫入第3個參數的自訂記錄檔名稱8-1-4產生使用者的自訂錯誤在PHP的錯誤等級之中,E
_USER_ERROR、E_USER_WARNING和E_USER_NOTICE錯誤等級可以用來建立使用者的自訂錯誤。在PHP程式是呼叫trigger_error()函數產生使用者自訂的錯誤:trigger_error("密碼是空字串!",E_USER_ERROR
);上述函數可以產生第1個參數訊息內容的自訂錯誤,在第2個參數指定錯誤等級。8-2PHP5的例外處理8-2-1PHP5的例外處理8-2-2繼承Exception類別8-2-1PHP5的例外處理-說明PHP5的例外處理(HandlingExceptions)是
一種流程控制的程式敘述,可以停止目前程式碼的執行,然後跳到指定區塊來處理錯誤。這些錯誤是一種例外物件(Exception),即在PHP程式執行期間,發生不正常執行狀態或錯誤時所產生的物件。8-2-1PHP5的例外處理-產生例外物件PHP內建的Except
ion類別可以建立例外物件,在PHP程式碼是使用throw指令來丟出例外。例如:在PHP程式丟出Exception例外物件:thrownewException("密碼是空字串!");上述程式碼使用new運算子建立例外物件,建構子方法的第1個參數是例外說明字串,第2個參數是
選項的數字錯誤碼。8-2-1PHP5的例外處理-取得例外資訊在Exception類別提供數個方法可以取得例外的相關資訊:方法說明getMessage()傳回錯誤訊息的字串,即建構子方法的第1個參數getCode()傳回
錯誤碼,即建構子方法的第2個參數getFile()傳回產生例外程式檔案的完整路徑getLine()傳回產生例外程式碼的行號getTrace()傳回產生例外過程每一個步驟的陣列getTraceAsString()類似getTrace(),可以傳回產生例外過程每一個步驟
的字串內容8-2-1PHP5的例外處理-例外處理的程式敘述(架構)PHP語言的例外處理程式敘述分成try和catch兩個程式區塊,可以處理特定的例外物件:try{………}catch(Exception$e){//例外處理………}8-2-1PHP5
的例外處理-例外處理的程式敘述(說明)try程式區塊:在try區塊的程式碼檢查是否產生例外,當例外產生時,就會丟出指定例外類型的物件。catch程式區塊:在try程式區塊的程式碼如果丟出例外,PHP程式需要準備catch程式區塊處理例外,傳入參數$e是例外物件,可以取得例外的相關資訊:prin
t"檔案:".$e->getFile()."<br>";print"行號:".$e->getLine()."<br>";print"錯誤訊息:".$e->getMessage()."<br>";8-2-2繼承Exception類別-說明在PHP程式除了可以使用現成E
xception類別建立例外物件外,我們也可以繼承Exception類別建立自訂的例外子類別,其主要目的如下所示:•在try/catch程式敘述可以區分不同錯誤所產生的例外物件。•在子類別可以新增所需的成員方法
。8-2-2繼承Exception類別-範例例如:驗證密碼錯誤的ValidException例外類別宣告:classValidExceptionextendsException{functiongetMyMessag
e(){print"檔案:".$this->getFile()."<br>";print"行號:".$this->getLine()."<br>";print"錯誤訊息:".$this->getMessag
e()."<br>";}}