亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于ThinkPHP中的異常處理詳解_php實例

2020-03-22 20:31:39
字體:
來源:轉載
供稿:網友
和PHP默認的異常處理不同,ThinkPHP拋出的不是單純的錯誤信息,而是一個人性化的錯誤頁面,下面這篇文章主要給大家介紹了關于ThinkPHP中異常處理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

什么是異常

從更加廣泛的角度來看,異常包含兩個方面,一方面是程序執行時由于語法、運行時錯誤等導致的異常,一方面時沒有給予正確的反饋,如客戶端要查詢某個產品,沒有查詢到,我認為這也屬于異常的一種。

第一種異常TP框架本身會在頁面中輸出錯誤信息,但是第二種異常則一般不會輸出任何信息,所以非常不方便調試。

本文將詳細介紹關于ThinkPHP異常處理的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

前提環境

現在 PHP 在很多時候是為前端提供接口,所以我們的異常處理也基于這一點進行處理。

在開發階段,TP 原有的異常處理是在頁面中輸出異常信息,這一點能夠滿足需求,但在生產環境中,則需要以其他方式處理異常。

本文都是針對生產環境的異常處理

AOP 編程

現在在很多語言中,都非常流行 AOP 編程思想,即面向切面編程思想,通俗的說,就是用統一的方式處理問題,而不是用相同的方式分別處理多個問題,對于異常處理來說,就是定義統一的異常信息,用統一的方式處理

大致思路

自定義異常處理類,重寫默認異常處理類的 render 方法,然后配置使用自定義異常處理類處理所有異常

代碼實現

在根目錄下創建目錄 exception,在其下創建ExceptionHandle.php,此類要繼承 handle 類

html' target='_blank'>class ExceptionHandler extends Handle

創建幾個屬性,用于定義異常信息

// http 錯誤碼 private $code; // 自定義異常信息 private $msg; // 自定義錯誤碼 private $errorCode;

覆蓋 Handle 類中的render 方法,當我們在代碼中使用 throw new Exception() 方式拋出異常信息時,其實就是調用了 render 方法,所以我們要重寫此方法,以返回我們自己的信息

public function render(Exception $ex)  return json([ msg = 自定義異常信息 ]); nbsp; }

下面新建控制器 Product,添加方法,進行測試

public function getProduct($id)  try{  3/0;  catch(Exception $ex){  throw $ex;  }

然后添加如下路由

Route::get( product/:id , api/v1.Product/getProduct 

輸入如下url 測試

http://z.cn/product/2

頁面輸出結果如下

可見,其并沒有執行自定義異常處理函數。

使用自定義的異常處理

在 config.php 中修改如下配置

// 異常處理handle類 留空使用 /think/exception/Handle  exception_handle = app/lib/exception/ExceptionHandler ,

然后再運行

自定義異常處理類

一類異常是用戶行為導致的異常,比如沒有查詢到符合條件的數據(從另一個角度來說,這其實不算異常),一類錯誤是運行時錯誤。而用戶導致的異??赡芊譃楹芏喾N,所以需要自定義相關的類。

首先定義一個父類

class BaseException extends Exception  //http 狀態碼  public $code; //錯誤具體消息  public $msg; //自定義錯誤碼  public $errorCode;  //構造函數用于接收傳入的異常信息,并初始化類中的屬性  public function __construct($params)  if (!is_array($params)) {  return;  if (array_key_exists( code , $params)) {  $this- code = $params[ code  if (array_key_exists( msg , $params)) {  $this- msg = $params[ msg  if (array_key_exists( errorCode , $params)) {  $this- errorCode = $params[ errorCode }

再定義一個處理找不到產品信息的異常處理類,用來重寫父類中的各個屬性,而且這個類中的屬性信息也可能會被修改,如 msg

class ProductNotFoundException extends BaseException  //http 狀態碼  public $code = 404; //錯誤具體消息  public $msg = 請求的產品不存在 //自定義錯誤碼  public $errorCode = 40000; }

處理不同異常

在 render 方法中,根據異常的不同分別處理

//分別處理兩種不容類型異常:1、用戶錯誤 2.代碼與運行時錯誤  if ($ex instanceof BaseException) {  } else {  }

說明:在 throw 異常時,會執行 render 函數,同時會將拋出的異常對象復制給參數 $ex,所以可以根據此參數判斷異常類型

現在的關鍵是生產環境,所以希望返回的異常信息,前端人員能夠看懂,而不是像上面那樣在頁面中輸出錯誤信息,還包括堆棧信息等。

那么前前端賀后端人員都能夠看懂的信息一定是 json(當然也可以是xml)了,修改 render 方法

if ($ex instanceof BaseException) {  $this- code = $ex- code;  $this- msg = $ex-  $this- errorCode = $ex- errorCode;  } else { //這里是在運行時產生的各種異常,所以無法準確輸出異常信息,所以只能統一輸出是服務器錯誤信息  $this- code = 500;  $this- msg = 服務器內部錯誤  $this- errorCode = 999;  }

然后以 json 格式返回錯誤信息

$result = [  msg = $this- msg,  error_code = $this- errorCode,  request_url = request()- url()  return json($result,$this- code);

至此,全局的異常處理就編寫好了,下面在 product.php 中編碼進行測試

public function getProduct($id)  //處理程序運行時錯誤  /*try{  3/0;  catch(Exception $ex){  throw $ex;  }*/  //處理用戶行為產生的錯誤  $error=[  msg = 沒有找到合適的產品  $ex=new ProductNotFoundException($error);  throw $ex;  }

提示:生產環境不要忘了將 app_debug 修改為 false

總結

您可能感興趣的文章:

PHP7基于curl實現的上傳圖片功能php技巧

PHP區塊查詢實現方法分析php技巧

PHP5.0~5.6 各版本兼容cURL文件上傳功能實例分析php技巧






以上就是關于ThinkPHP中的異常處理詳解_php實例的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩有码在线电影| 国产精品伦子伦免费视频| 97视频在线观看播放| 日韩精品中文字幕在线| 亚洲色图欧美制服丝袜另类第一页| 91情侣偷在线精品国产| 九九热最新视频//这里只有精品| 国产精品久久久久久超碰| 午夜精品久久久久久99热| 国产日韩在线视频| 久久精品电影网| 亚洲午夜激情免费视频| 91亚洲精品一区二区| 国产91亚洲精品| 97视频免费观看| 欧美性生交大片免网| 亚洲影视九九影院在线观看| 91视频-88av| 国产中文欧美精品| 日韩在线观看电影| 国产精品成人一区二区三区吃奶| 午夜精品久久久久久久男人的天堂| 日韩中文第一页| 欧美日韩一区二区免费视频| 成人在线小视频| 国产91成人video| 国产第一区电影| 韩国福利视频一区| 国产裸体写真av一区二区| 欧美性xxxxhd| 欧美性xxxx极品高清hd直播| 色偷偷噜噜噜亚洲男人| 欧美夜福利tv在线| 国产在线精品播放| 亚洲精品欧美极品| 亚洲天天在线日亚洲洲精| 91欧美日韩一区| 欧美日韩国产在线播放| 欧美激情第三页| 97**国产露脸精品国产| 亚洲欧美日韩精品久久亚洲区| 日韩精品免费在线播放| 最好看的2019年中文视频| 亚洲性猛交xxxxwww| 亚洲欧美国产精品va在线观看| 亚洲日韩欧美视频一区| 亚洲a在线观看| 国产精品国产三级国产专播精品人| 91理论片午午论夜理片久久| 不卡av在线网站| 成人夜晚看av| 国产欧美精品日韩精品| 欧美色视频日本高清在线观看| 亚洲国产精品人久久电影| 97精品一区二区三区| 午夜精品一区二区三区视频免费看| 欧美日韩精品在线播放| 国产欧美在线观看| 91视频88av| 精品视频一区在线视频| 久久精品在线播放| 亚洲欧洲一区二区三区久久| 亚洲影视九九影院在线观看| 最近中文字幕2019免费| 欧美高清在线播放| 韩国欧美亚洲国产| 日韩精品极品在线观看播放免费视频| 国产视频精品xxxx| 日韩hd视频在线观看| 欧美乱妇高清无乱码| 国产亚洲aⅴaaaaaa毛片| 日韩欧美在线看| 亚洲最大福利视频| 精品国产一区二区三区久久久狼| 亚洲欧洲一区二区三区在线观看| 国产成人精品久久久| 91在线视频一区| 欧美日韩精品中文字幕| 精品亚洲永久免费精品| 欧美色videos| 日韩激情视频在线播放| 亚洲va欧美va在线观看| 日韩在线免费观看视频| 97视频免费在线看| 亚洲精品按摩视频| 成人黄色短视频在线观看| 国内精品久久久久久中文字幕| 91老司机在线| 欧美成人国产va精品日本一级| 色播久久人人爽人人爽人人片视av| 亚洲人成毛片在线播放| 国产美女被下药99| 日韩精品亚洲元码| 黑人狂躁日本妞一区二区三区| 成人精品久久久| 久久夜色精品亚洲噜噜国产mv| 久久夜色精品亚洲噜噜国产mv| 国产精品www网站| 欧美裸体xxxx| 色综合久久天天综线观看| 精品视频在线播放| 日韩美女视频免费看| 在线视频欧美性高潮| 日韩在线免费av| 懂色aⅴ精品一区二区三区蜜月| 北条麻妃99精品青青久久| 91国语精品自产拍在线观看性色| 国产精品永久免费视频| 日韩精品视频在线| 国产一区二区三区在线| 国产日韩换脸av一区在线观看| 国产精品xxxxx| 国产成人精品日本亚洲| 精品女厕一区二区三区| 欧美最顶级丰满的aⅴ艳星| 欧美激情视频免费观看| 岛国av一区二区在线在线观看| 一区二区三区四区精品| 亚洲精品456在线播放狼人| 亚洲欧洲在线看| 亚洲精品国产精品国自产观看浪潮| www.日韩.com| 91国产精品电影| 高清亚洲成在人网站天堂| 久久久99免费视频| 91日韩在线视频| www.xxxx欧美| 中文字幕日韩欧美精品在线观看| 久久久这里只有精品视频| 亚洲国产成人在线播放| 亚洲天堂av在线免费| 精品国产依人香蕉在线精品| 亚洲国产精品系列| 国产午夜精品全部视频播放| 成人中文字幕+乱码+中文字幕| 日韩va亚洲va欧洲va国产| 亚洲国产美女精品久久久久∴| 国产精品欧美风情| 国语自产在线不卡| 国产精品av在线播放| 亚洲精品二三区| 亚洲精品动漫久久久久| 欧美日韩一区二区在线| 久久好看免费视频| 久久91亚洲人成电影网站| 91热精品视频| 黑人巨大精品欧美一区免费视频| 亚洲嫩模很污视频| 久久久久中文字幕| 国产99久久精品一区二区 夜夜躁日日躁| 国产午夜精品一区理论片飘花| 亚洲美女喷白浆| 欧美日韩国产麻豆| 懂色av中文一区二区三区天美| 欧美激情欧美激情在线五月| 欧美精品免费在线观看| 亚洲美女性视频| 色视频www在线播放国产成人| 亚洲第一二三四五区| 国产精品一区二区三区毛片淫片| 久久精品视频在线观看| 神马久久久久久| 亚洲经典中文字幕| 日本精品一区二区三区在线播放视频|