<?php // 設置頂層異常處理器 set_exception_handler('exceptionHandler'); function exceptionHandler($e) { echo $e -> getMessage(); } // register_shutdown_function可捕獲 FATAL ERROR 級別的錯誤 register_shutdown_function('fatalHandler'); function fatalHandler() { $error = error_get_last(); $errno = $error["type"]; $errfile = $error["file"]; $errline = $error["line"]; $errstr = $error["message"]; $str= "errno:" . $errno . "-errstr:" . $errstr . "-errfile:" . $errfile . "-errline:" . $errline; echo $str; } // set_error_handler只能捕獲 NOTICE/WARNING級別的錯誤 set_error_handler('errorHandler'); function errorHandler($errno,$errstr,$errfile,$errline) { $str= "errno:" . $errno . "-errstr:" . $errstr . "-errfile:" . $errfile . "-errline:" . $errline; echo $str; } // 設置自動裝載函數 spl_autoload_register('splAutoloadRegister'); function splAutoloadRegister($name) { print '[['. $name .']] can not autoload'; echo "\n"; } function checkNum($number) { if($number>1) { // 異常構造函數 // Value must be 1 or below:異常描述 // 400:異常錯誤碼 // new Exception('parentOne', 401):該異常的上一個異常 throw new Exception("Value must be 1 or below", 400, new Exception('parentOne', 401)); } return true; } try { checkNum(2); } catch (\Exception $e) { // 獲取異常消息內容 echo $e -> getMessage(); // 返回異常鏈中的前一個異常(返回的是一個Throwable接口類, Exception是Throwable的一個子類) // 可使用$e -> getPrevious() -> getCode()獲取上一個異常的信息 echo $e -> getPrevious(); // 獲取異常錯誤碼 echo $e -> getCode(); // 建立異常時的程序文件名稱 echo $e -> getFile(); // 獲取建立的異常所在文件中的行號 echo $e -> getLine(); // 獲取異常追蹤信息 print_r($e -> getTrace()); // 獲取字符串類型的異常追蹤信息 echo $e -> getTraceAsString(); // 將異常對象轉換爲字符串 echo $e -> __toString(); }