正確的處理PHP異常

2021-10-01 17:08:39 字數 2858 閱讀 7529

剛開始接觸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 如果僅僅...