温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中怎么捕获异常并处理

发布时间:2021-06-29 16:50:11 来源:亿速云 阅读:174 作者: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