php只有手動拋出異常才能捕獲異常php
class emailException extends Exception{ //定義魔術方法 ,直接輸出對象的信息 public function __toStirng(){ $error = "Code:{$this->getCode()},message:{$this->getMessage()} line:{$this->getLine()},file:{$this->getFile()}"; return $error; } } function reg($i){ if($i>0){ throw new emailException("錯誤"); } } try{ reg($i=6); }catch(emailException $e){ echo $e; echo $e->getMessage(); }catch(Exception $e){ $e->getMessage(); } //此處須要注意 exception 做爲超類應該放到最後捕獲 //若是提早捕獲這個超類,後面的捕獲就終止了,並且不提供 針對性的信息處理
運行圖函數
自定義 異常處理函數(只能捕獲到異常和非致命的錯誤,致命的錯誤仍是會掛掉)this
function customError($errno,$errstr,$errfile,$errline){ echo "<b>錯誤代碼</b>[${error}]${errstr}"."</br>"; echo "錯誤所在代碼行:{$errline}文件{$errfile}"."</br>"; echo "PHP版本",PHP_VERSION,"(",PHP_OS,")"."</br>"; } set_error_handler("customError",E_ALL|E_STRICT); $a = array('o'=>2,4,6,8); echo $a[o]; //錯誤的代碼 //set_error_handler()函數會接管php內置的錯誤處理, //能夠在同一個頁面使用 restore_error_handler()取消接管
運行圖:spa
簡單處理fetal error的錯誤rest
class Shutdown{ public function stop(){ if(error_get_last()){ print_r(error_get_last()); } die('Stop.'); } } register_shutdown_function(array(new Shutdown(),'stop')); //此函數會在php程序終止或者die時觸發一個函數 $a = new a(); //錯誤代碼 echo "致命錯誤";
運行圖:code