剛開始接觸php的時候沒有意識到異常的重要性,有時候出問題很難精確的找到問題點,正確的處理異常也是一門學問
異常的類別
php7異常做了很多變動,異常類 exception 和錯誤類 error 都實現了 throwable 介面
結構如下:
throwable
closedgeneratorexception
domexception
errorexception
intlexception
logicexception
pharexception
reflectionexception
runtimeexception
sodiumexception
badmethodcallexception
badfunctioncallexception
domainexception
invalidargumentexception
lengthexception
outofrangeexception
outofbound***ception
overflowexception
pdoexception
rangeexception
underflowexception
unexpectedvalueexception
arithmeticerror
assertionerror
parseerror
typeerror
divisionbyzeroerror
argumentcounterror
error
exception
什麼時候才需要拋異常
這個一切從實際出發,如果你覺得你的**可能會出現問題,就可以進行丟擲異常
如何捕獲異常
php中使用 try…catch…finally 捕獲異常
public function test() catch (\exception $e) finally
}如果不確定出現異常還是錯誤,可以直接捕獲 throwable 異常
public function test() catch (\throwable $e) finally
}業務場景實戰
現在的專案很多都是前後端分離、restful風格介面的設計進行開發。現在我就用tp5框架來進行實戰下在實際業務中是如何優雅的使用異常的
場景描述
選擇乙個比較簡單的業務場景,以登入模組為例,使用者在移動端進行登入時,需要進行登入,註冊,忘記密碼,獲取手機驗證碼等介面。
構建約束條件
登入入參:
使用者手機號
使用者密碼
手機驗證碼
約束:使用者手機號不能為空,格式正確,且此使用者確實是存在的
密碼不能為空,密碼格式正確
手機驗證碼不能為空,且是在有效期內的
註冊入參:
使用者手機號
使用者密碼
密碼二次確認
手機驗證碼
約束:使用者手機號不能為空,格式正確,且此使用者確實是新使用者,系統不存在此使用者資訊
密碼不能為空,密碼格式正確
二次密碼要跟密碼一樣
手機驗證碼不能為空,且是在有效期內的
忘記密碼:
入參:使用者手機號
使用者新密碼
密碼二次確認
手機驗證碼
約束:使用者手機號不能為空,格式正確,且此使用者確實是存在的
密碼不能為空,密碼格式正確
二次密碼要跟密碼一樣
手機驗證碼不能為空,且是在有效期內的
獲取手機驗證碼
入參:使用者手機號
約束:使用者手機號不能為空,格式正確
一分鐘內只能獲取一次
自定義tp5異常
建立異常處理handle類
* @var $httpstatuscode http狀態碼
/** * @var $msg 錯誤資訊
*/private $msg;
/** * @var $code 錯誤碼
*/private $code; # 自定義錯誤異常需要重寫tp5父類的這個render方法
public function render(exception $e)
else
$result = [ 'code' => $this->code, 'msg' => $this->msg
]; # 返回給前端
建立基礎的異常類
public $code = 10000;
public function __construct(array $params = )
if (array_key_exists('msg', $params))
if (array_key_exists('code', $params))
}
}
建立具體異常類
引數錯誤異常類
class usernotexist***ception extends baseexception
如何使用
我們先來看看登入這個功能
傳統處理方法
public function login($phone, $password)', got '#' at position 15: uid) } 通…phone, $password)
}
PHP異常處理
php 4 require once cmd php4 command.php class commandmanager php if file exists path require once path if class exists cmd ret new cmd if is a ret,com...
PHP 異常處理
異常 exception 用於在指定的錯誤發生時改變指令碼的正常流程。php 5 提供了一種新的物件導向的錯誤處理方法。異常處理用於在指定的錯誤 異常 情況發生時改變指令碼的正常流程。這種情況稱為異常。當異常被觸發時,通常會發生 我們將展示不同的錯誤處理方法 當異常被丟擲時,其後的 不會繼續執行,p...
php異常處理
全面的知識請參考 下面是自己的一點認識 php的異常基本是這樣子的 class customexception extends exception email someone example.com try catch exception e catch customexception e 如果僅僅...