摘要:是所有異常的基類。它包含的異常的確是對象,唯一條件就是必須從類繼承。在語句中使用所謂的是一關系對類的名字和異常對象做檢查。如果異常在任何地方都沒能捕獲,那么會提供最后的機會異常處理函數。
Exception是所有異常的基類。
Exception { /* 屬性 */ protected string $message ; protected int $code ; protected string $file ; protected int $line ; /* 方法 */ public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] ) final public string getMessage ( void ) final public Exception getPrevious ( void ) final public int getCode ( void ) final public string getFile ( void ) final public int getLine ( void ) final public array getTrace ( void ) final public string getTraceAsString ( void ) public string __toString ( void ) final private void __clone ( void ) }
Exception::__construct — 異常構造函數 Exception::getMessage — 獲取異常消息內容 Exception::getPrevious — 返回異常鏈中的前一個異常 Exception::getCode — 獲取異常代碼 Exception::getFile — 獲取發生異常的程序文件名稱 Exception::getLine — 獲取發生異常的代碼在文件中的行號 Exception::getTrace — 獲取異常追蹤信息 Exception::getTraceAsString — 獲取字符串類型的異常追蹤信息 Exception::__toString — 將異常對象轉換為字符串 Exception::__clone — 異常克隆
以上部分來自官網:http://php.net/manual/zh/clas...
下面是參考《PHP5權威編程》
try,catch,throw
異常處理使用3中語言結構:try,catch,throw。為了處理一個異常,需要在try代碼塊中運行一些代碼
try{ $article->display(); }
try代碼只是PHP留意在代碼塊里的代碼運行時產生的異常。如果出現了異常,它馬上被傳遞給緊跟著try代碼塊的一個或者更多的獲取代碼塊中:
catch(Exception $e){ die($e->getMessage()); }
變量$e似乎包含了一個對象。它包含的異常的確是對象,唯一條件就是必須從Exception類繼承。
如果想在你自己的代碼中產生一個異常,使用throw語句:
$fp = @fopen($fileName,"r"); if(!is_resource($fp)){ throw new FileException("could not open"); }
可以看出異常是個對象,throw只是簡單的使用這個特定的對象作為異常的一部分
可以定義異常:
class IOException extends Exception{} class FileException extends Exception{}
異常類中不需要成員變量或者方法:你需要的所有內容都已經在內置Exception類中定義了。
PHP在catch語句中使用所謂的“是一”關系對類的名字和異常對象做檢查。也就是,如果該異常對象是一個catch類的實例,或者其子類的實例,PHP就執行catch代碼
如:
try{ $article->display(); }catch(IOException $e){ print "IOException"; }catch(FileException $e){ print "FileException"; }
這個例子中IOException的catch同時捕獲到IOException和FileException,因為FileException是從IOException繼承的
如果每一個catch都沒能捕獲到異常,那么會將該異常傳遞給調用的函數,給調用的函數提供機會來捕獲。
如果異常在任何地方都沒能捕獲,那么PHP會提供最后的機會:異常處理函數。默認情況下PHP打印出錯誤信息、類的名字和一個堆棧信息。
通過調用set_exception_handler(),可以注冊異常處理函數
function my_exception(Exception $e){ print "error is ".$e->getMessage(); exit; } set_exception_handler("my_exception");
這個函數用來處理所有沒能在catch中獲取的異常,異常處理函數中不能再拋出異常。
看看ThinkPHP中的做法:
set_exception_handler(array("Think","appException")); static public function appException($e) { halt($e->__toString()); } static public function halt($error) { $e = array(); if (APP_DEBUG || IS_CLI) { //調試模式下輸出錯誤信息 if (!is_array($error)) { $trace = debug_backtrace(); $e["message"] = $error; $e["file"] = $trace[0]["file"]; $e["line"] = $trace[0]["line"]; ob_start(); debug_print_backtrace(); $e["trace"] = ob_get_clean(); } else { $e = $error; } if(IS_CLI){ exit(iconv("UTF-8","gbk",$e["message"]).PHP_EOL."FILE: ".$e["file"]."(".$e["line"].")".PHP_EOL.$e["trace"]); } } else { //否則定向到錯誤頁面 $error_page = C("ERROR_PAGE"); if (!empty($error_page)) { redirect($error_page); } else { $message = is_array($error) ? $error["message"] : $error; $e["message"] = C("SHOW_ERROR_MSG")? $message : C("ERROR_MESSAGE"); } } // 包含異常頁面模板 $exceptionFile = C("TMPL_EXCEPTION_FILE",null,THINK_PATH."Tpl/think_exception.tpl"); include $exceptionFile; exit; }
在框架的入口注冊異常處理函數:先引入對應的模板文件,然后在模板文件中直接顯示出錯誤信息
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22493.html
摘要:變量作為函數返回值時,必須聲明為動態類型。動態變量與中的變量基本完全相同支持在使用時改變類型。比較運算符在運算時考慮變量類型,如果是動態變量與一致。與不一致,語句可以沒有,表示忽略所有異常。 上一篇 《Zephir 簡介》 簡單介紹了環境搭建,編寫了一個的簡單示例。這一篇繼續介紹 Zephir 基礎。 基本語法Zephir 中,每個文件都必須有且只有一個類,每個類都必須有一個命名空間,...
摘要:當項目拋出異常時操作那個方法時傳的參數執行操作異常相關操作當前異常類通過異常類名,我們可以知道是訂單支付異常。 引出 如果你調一個類,調用時數據驗證時報了個錯,你會以什么方式返回 數組,布爾值? 數組這個可以帶錯誤原因回來,那布爾值呢? 返回了個 false, 報錯時把錯誤放在類變量里?還是專門用一個獲取錯誤的方法進行獲取? 上面說的情況是代碼完全沒有問題的情況。那如果是一些第三方的工...
摘要:源碼分析錯誤及異常處理機制錯誤及異常處理機制文件是,在框架引導文件的的基礎文件中注冊不知道的可以去看源碼分析二入口篇,通過進行的注冊。異常中止處理將錯誤信息托管至寫入日志通過獲取最后拋出的錯誤,把信息托管至,在通過異常處理函數進行記錄信息。 源碼分析 錯誤及異常處理機制 錯誤及異常處理機制文件是/thinkphp/library/think/Error.php,在框架引導文件的的基礎文...
摘要:現在我就用框架來進行實戰下在實際業務中是如何優雅的使用異常的場景描述選擇一個比較簡單的業務場景,以登錄模塊為例,用戶在移動端進行登錄時,需要進行登錄,注冊,忘記密碼,獲取手機驗證碼等接口。 前言 剛開始接觸PHP的時候沒有意識到異常的重要性,有時候出問題很難精確的找到問題點,正確的處理異常也是一門學問 異常的類別 PHP7異常做了很多變動,異常類 Exception 和錯誤類 Erro...
摘要:關于拋出異常如在我的上一篇文中所說的一樣在接口的設計中接口的返回的數據是非常重要的例如無法避免的等等這些都是要命的錯誤同時還有一個極大的問題就是在新增模塊中例如我最近需要新增一個的分詞查詢模塊這個在添加索引刪除索引等等操作的時候是非常容易導 showImg(http://pqykjwm6s.bkt.clouddn.com/Grassland_Scenery_by_Shi_Yuejun....
閱讀 2404·2021-11-24 09:39
閱讀 3223·2021-10-09 09:53
閱讀 1130·2021-09-22 16:06
閱讀 4442·2021-09-02 10:18
閱讀 800·2021-08-23 09:42
閱讀 1761·2021-08-17 10:11
閱讀 2685·2019-08-30 13:02
閱讀 2121·2019-08-30 12:49