PHP异常捕获

<?php
ini_set('display_errors','On');
error_reporting(E_ALL);
//未捕获异常的用户定义函数
set_exception_handler('myException');
//设置用户自定义的错误处理函数
//error_get_last获取不到set_error_handler之后的err,但是set_error_handler之前的错误还是可以获取到。
set_error_handler('myError');

//deprecated: 最低级别的错误,表示"不推荐, 不建议"。例如在php 5中使用了ereg系列的正则函数就会出现。这类错误一般由于使用了不推荐的、过时的函数或语法造成。不影响程序正常运行,但建议修正。
//notice: 一般指语法中存在不恰当的地方。如使用变量但是未定义就会报此错误。不影响程序正常流程。
//warning: 较高级别的错误,在语法中出现很不恰当的情况才会出现此错误,比如函数参数不匹配。会导致得不到预期的结果,需要修改代码。
//fetal error: 致命错误,直接导致程序终止运行。这类错误必须修改。
//prase error: 语法解析错误,上面几种都属于运行时错误,此错误在运行前就会抛出。

//@抑制错误输出,不影响set_error_handler的捕获。
//@不能抑制异常的传递
@ff();


$error = error_get_last();
var_dump($error);
//取得程序中最后一个错误信息(包括Error、 Warning、Notice等所有的错误)
//array(4) {
//    ["type"]=>
//  int(2)
//  ["message"]=>
//  string(16) "Division by zero"
//    ["file"]=>
//  string(21) "D:\doc\test\index.php"
//    ["line"]=>
//  int(17)
//}

function ff(){

    try{

        $c = 2/0;
        $c = 2/0;
        $a = [1,2,3,4,5,6,7,8];
        foreach ($a as $k=>$v){
            if($k == 3) unset($a[$k]);
            //var_dump($a[$k]);
        }

        throw new Exception('dfsfsdf');

        var_dump($a);
    }catch (Exception $e){
        var_dump('wwwwwwwwwww');
        var_dump($e->getMessage());
    }
}

function myException($exception)
{
    echo "my " , $exception->getMessage();exit;
}

//$error_level
//2	E_WARNING	运行时非致命的错误。没有停止执行脚本。
//8	E_NOTICE	运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生。
//256	E_USER_ERROR	用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。
//512	E_USER_WARNING	用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。
//1024	E_USER_NOTICE	用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。
//4096	E_RECOVERABLE_ERROR	可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。
//8191	E_ALL	所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)。
function myError($error_level, $error_message, $error_file = '', $error_line = 0, $error_context = [])
{
    var_dump("err");
    var_dump(compact('error_level','error_message','error_file','error_line','error_context'));
    //string(3) "err"
    //array(5) {
    //    ["error_level"]=>
    //  int(2)
    //  ["error_message"]=>
    //  string(16) "Division by zero"
    //    ["error_file"]=>
    //  string(21) "D:\doc\test\index.php"
    //    ["error_line"]=>
    //  int(40)
    //  ["error_context"]=>
    //  array(0) {
    //    }
    //}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值