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

??

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

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

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

<?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) {     // 驗(yàn)證失敗 } 
    catch(Fuel\Email\SendingFailedException $e) {     // 這個(gè)驅(qū)動(dòng)無法發(fā)送 email } 
    finally {     // 無論拋出什么樣的異常都會(huì)執(zhí)行,并且在正常程序繼續(xù)之前執(zhí)行 }

SPL 異常

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

<?php 
    class ValidationException extends Exception {}

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

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


?? ??: ?? ??: