PHP異常處理

簡單的異常捕獲

<?php #應(yīng)用類
namespace Home\Controller;
class TestController{
    function a(){
        try{
            throw new \Exception('異常');
        }catch (\Exception $exception){
            echo $exception->getMessage(); #異常
        }
    }
}

如果類中有20個方法,每個都try_catch?
可以寫個基類,在基類的構(gòu)造函數(shù)里注冊一個異常處理函數(shù),其他的類繼承這個基類

<?php #基類
namespace Home\Controller;
class MyController{
    public function __construct () {
        //set_exception_handler() 接收一個callable
        set_exception_handler(
            function (\Throwable $exception){
                echo $exception->getMessage();
            }
        );
    }
}

繼承基類,所有的異常都會拋出給基類,基類可以做統(tǒng)一處理.

<?php #應(yīng)用類
namespace Home\Controller;
class TestController extends MyController {
    function a(){
        throw new \Exception('異常aaa');#異常aaa
    }
    function b(){
        throw new \Exception('異常bbb');#異常bbb
    }
    function c(){
        throw new \mysqli_sql_exception('數(shù)據(jù)庫異常'); #數(shù)據(jù)庫異常
    }
    function d(){
        set_time_limit(1);
        while(true){}
    }
    function e(){
        ini_set('memory_limit','10M');
        while (true){
            $data[] = 1;
        }
    }
  
}

注意最后兩個方法
function d()報錯超時
function e()報錯內(nèi)存溢出
并不能被基類捕獲
可以注冊一個register_shutdown_function(),該方法在腳本結(jié)束時執(zhí)行.

#index.php 入口文件
register_shutdown_function(
    function (){
        $error = error_get_last();
        if ($error){
            dump($error);
        }
    }
);

要注意的是,這個函數(shù)可以出現(xiàn)多次,并按注冊先后順序執(zhí)行,前邊的執(zhí)行了exit(); 后續(xù)的將不會執(zhí)行.有的框架如tp3.2.3已經(jīng)注冊了此方法,并且他內(nèi)部執(zhí)行了exit(); 想讓自己的方法執(zhí)行,應(yīng)該早于框架注冊, 可以放在index.php文件中,這樣便能處理超時和內(nèi)存溢出錯誤

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文介紹php開源庫BooBoo,是一個處理php異常和錯誤的開源庫,通過簡單的分析代碼,我們知道了實際項目中怎么...
    小聰明李良才閱讀 841評論 0 6
  • 這篇文章主要對php中的錯誤處理進(jìn)行簡單的記錄 php一開始被設(shè)計為一門面向過程的語言,所以異常處理沒有使用像Ja...
    BrucelLi閱讀 477評論 0 0
  • 異常(Exception)用于在指定的錯誤發(fā)生時改變腳本的正常流程。 什么是異常?PHP 5 提供了一種新的面向?qū)?..
    林路同閱讀 735評論 0 0
  • 定義和用法 set_exception_handler() 函數(shù)設(shè)置用戶自定義的異常處理函數(shù)。該函數(shù)用于創(chuàng)建運行時...
    呂艷凱閱讀 485評論 0 0
  • 異常(Exception)用于在指定的錯誤發(fā)生時改變腳本的正常流程。 什么是異常? PHP 5 提供了一種新的面向...
    josephok閱讀 614評論 0 7

友情鏈接更多精彩內(nèi)容