91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中怎么捕獲異常并處理

發布時間:2021-06-29 16:50:11 來源:億速云 閱讀:184 作者:Leah 欄目:大數據

本篇文章給大家分享的是有關PHP中怎么捕獲異常并處理,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。


<?php

header("Content-type:text/html;charset=utf-8");

try

{

    //業務處理 錯誤時拋出異常。

    $age = 130;

    if ($age > 120) {

        throw new Exception('年齡不能大于120歲。', 1001);

    }

} catch (Exception $e) {

    $err = [

        'code' => $e->getCode(),

        'msg'  => $e->getMessage(),

        'file'    => $e->getFile(),

        'line'   => $e->getLine()

    ];

    echo json_encode($err);

}

輸出:{"code":1001,"msg":"\u5e74\u9f84\u4e0d\u80fd\u5927\u4e8e120\u5c81\u3002","file":"\/data\/mi\/demo.php","line":11}

自定義異常處理

<?php

header("Content-type:text/html;charset=utf-8");

class proException extends Exception

{

    //根據業務需求,自定義方法

    /**

     * 獲取錯誤信息

     * @param int $type 類型 1=json 2=數組

     * @return array

     */

    public function getErrorInfo($type = 2)

    {

        $err = [

            'code' => $this->getCode(),

            'msg'  => $this->getMessage(),

            'file'    => $this->getFile(),

            'line'   => $this->getLine()

        ];

        if ($type == 1) {

            return json_encode($err);

        }

        return $err;

    }

}

try

{

    //業務處理 錯誤時拋出異常。

    $age = 130;

    if ($age > 120) {

        throw new proException('年齡不能大于120歲。', 1001);

    }

} catch (proException $e) {

    $info = $e->getErrorInfo();

    var_dump($info);

}

輸出:array(4) { ["code"]=> int(1001) ["msg"]=> string(27) "年齡不能大于120歲。" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(53) }

捕捉多個異常

<?php

header("Content-type:text/html;charset=utf-8");

class proException extends Exception

{

    //根據業務需求,自定義錯誤方法

    /**

     * 獲取錯誤信息

     * @param int $type 類型 1=json 2=數組

     * @return array

     */

    public function getErrorInfo($type = 2)

    {

        $err = [

            'code' => $this->getCode(),

            'msg'  => $this->getMessage(),

            'file'    => $this->getFile(),

            'line'   => $this->getLine()

        ];

        if ($type == 1) {

            return json_encode($err);

        }

        return $err;

    }

}

try

{

    if ($_GET['age'] > 100) {

        throw new proException('自定義的異常處理', 1002);

    } else {

        throw new Exception('系統的異常處理', 1002);

    }

} catch (proException $e) {

    $info =  $e->getErrorInfo();

    var_dump($info);

} catch (Exception $e) {

    echo $e->getMessage();

}

?age=110 輸出:array(4) { ["code"]=> int(1002) ["msg"]=> string(24) "自定義的異常處理" ["file"]=> string(17) "/data/mi/demo.php" ["line"]=> int(64) }

?age=20 輸出:系統的異常處理。

日志記錄

//禁止錯誤輸出

error_reporting(0);

//設置錯誤處理器

set_error_handler('errorHandler');

//在腳本結束時運行的函數

register_shutdown_function('fatalErrorHandler');

/**

 * 錯誤處理

 * @param int    $err_no      錯誤代碼

 * @param string $err_msg  錯誤信息

 * @param string $err_file    錯誤文件

 * @param int    $err_line     錯誤行號

 * @return string

 */

function errorHandler($err_no = 0, $err_msg = '', $err_file = '', $err_line = 0)

{

    $log = [

        '['.date('Y-m-d h-i-s').']',

        '|',

        $err_no,

        '|',

        $err_msg,

        '|',

        $err_file,

        '|',

        $err_line

    ];

    $log_path = '/data/mi/test.txt';

    error_log(implode(' ',$log)."\r\n",3, $log_path);

    //echo implode(' ',$log)."<br>";

}

/**

 * 捕捉致命錯誤

 * @return string

 */

function fatalErrorHandler() {

    $e = error_get_last();

    switch ($e['type']) {

        case 1:

            errorHandler($e['type'], $e['message'], $e['file'], $e['line']);

            break;

    }

}

class DemoClass_1

{

    public function index()

    {

        //這里發生一個警告錯誤,出發errorHandler

        echo $undefinedVarible;

    }

}

$demo_1 = new DemoClass_1();

//這里發生一個警告錯誤,被errorHandler 捕獲

$demo_1->index();

//發生致命錯誤,腳本停止運行觸發 fatalErrorHandler

$demo_2 = new DemoClass_2();

$demo_2->index();

打開echo后 輸出:

[2016-08-07 09-01-34] | 8 | Undefined variable: undefinedVarible | /data/mi/demo.php | 126

[2016-08-07 09-01-34] | 1 | Class 'DemoClass_2' not found | /data/mi/demo.php | 134

備注:

1. register_shutdown_function 也可以用于API調試中,記錄每次請求值和返回值,方便調試。

2. 利用 “|” 分割的好處是,便于利用 awk 對日志進行分割處理。

以上就是PHP中怎么捕獲異常并處理,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

雷山县| 泽普县| 古丈县| 西充县| 尤溪县| 施甸县| 历史| 巴林左旗| 大英县| 贞丰县| 阳新县| 遵义县| 沅江市| 罗山县| 政和县| 泗洪县| 新竹县| 梁河县| 尉氏县| 太原市| 琼结县| 文成县| 双峰县| 温宿县| 临汾市| 清丰县| 嘉黎县| 阿尔山市| 东明县| 马关县| 靖远县| 遵义县| 玉田县| 东海县| 青田县| 仁化县| 宁陵县| 中方县| 黎川县| 东宁县| 清苑县|