亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

characters

異常是許多流行編程語言的標配,但它們往往被 PHP 開發(fā)人員所忽視。像 Ruby 就是一個極度重視異常的語言,無論有什么錯誤發(fā)生,像是 HTTP 請求失敗,或者數(shù)據(jù)庫查詢有問題,甚至找不到一個圖片資源,Ruby (或是所使用的 gems),將會拋出異常,你可以通過屏幕立刻知道所發(fā)生的問題。

PHP 處理這個問題則比較隨意,調(diào)用 file_get_contents() 函數(shù)通常只會給出 FALSE 值和警告。許多較早的 PHP 框架比如 CodeIgniter 只是返回 false,將信息寫入專有的日志,或者讓你使用類似 $this->upload->get_error() 的方法來查看錯誤原因。這里的問題在于你必須找出錯誤所在,并且通過翻閱文檔來查看這個類使用了什么樣的錯誤的方法,而不是明確的暴露錯誤。

另一個問題發(fā)生在當類自動拋出錯誤到屏幕時會結(jié)束程序。這樣做會阻擋其他開發(fā)者動態(tài)處理錯誤的機會。應(yīng)該拋出異常讓開發(fā)人員意識到錯誤的存在,讓他們可以選擇處理的方式,例如:

<?php 
    $email = new Fuel\Email; 
    $email->subject('My Subject'); 
    $email->body('How the heck are you?'); 
    $email->to('guy@example.com', 'Some Guy'); 
    try {     $email->send(); } 
    catch(Fuel\Email\ValidationFailedException $e) {     // 驗證失敗 } 
    catch(Fuel\Email\SendingFailedException $e) {     // 這個驅(qū)動無法發(fā)送 email } 
    finally {     // 無論拋出什么樣的異常都會執(zhí)行,并且在正常程序繼續(xù)之前執(zhí)行 }

SPL 異常

原生的 Exception 類并沒有提供太多的調(diào)試情境給開發(fā)人員,不過可以通過建立一個特殊的 Exception 來彌補它,方式就是建立一個繼承自原生 Exception類的一個子類:

<?php 
    class ValidationException extends Exception {}

如此一來,可以加入多個 catch 區(qū)塊,并且根據(jù)不同的異常分別處理。通過這樣可以建立 許多自定義異常,其中有些已經(jīng)在 SPL 擴展 提供的 SPL 異常中定義了。

舉例來說,如果你使用了 __call() 魔術(shù)方法去調(diào)用一個無效的方法,而不是拋出一個模糊的標準 Exception 或是建立自定義的異常處理,你可以直接拋出 throw new BadMethodCallException;。


Previous article: Next article: