php不输出致命错误信息,PHP捕获致命错误的时候没有显示异常?

在PHP中自己想要试用自定义的异常处理函数捕获所有的错误处理,并且输出具有一定格式的错误信息,包括致命错误和非致命错误,在处理非致命错误上输出是没问题的,但是输出致命错误的时候,并没有输出,代码如下:

/**

* 使用自定义的异常处理函数,捕获所有的错误处理,包括非致命的和致命的

*/

// 屏蔽所有的错误显示

error_reporting(0);

// 使用自定义的异常处理函数来替代PHP的错误处理

set_error_handler('customError');

// 当PHP终止的时候(执行完成或者是遇到致命错误中止的时候)会调用FetalError方法

register_shutdown_function('FetalError');

/**

* 自定义的异常处理函数

* @param $errno int

* @param $errstr string

* @param $errfile string

* @param $errline int

* @throws Exception

*/

function customError($errno, $errstr, $errfile, $errline)

{

$res = PHP_EOL . " 错误代码: [${errno}] ${errstr}" . PHP_EOL;

$res .= " 错误所在的代码行: {$errline}";

$res .= " 文件: {$errfile}" . PHP_EOL;

$res .= " PHP版本:" . PHP_VERSION . "(" . PHP_OS . ")" . PHP_EOL;

// 自定义错误处理时,手动抛出异常

throw new Exception($res);

// echo $res;

}

/**

* 捕获致命错误

*/

function FetalError()

{

$err_info = error_get_last();

if ($err_info) {

customError($err_info['type'], $err_info['message'], $err_info['file'], $err_info['line']);

}

}

function test()

{

// Warning错误

// $a = 5 / 0;

// echo PHP_EOL;

// 这里报致命错误Fatal error

$a = new a();

echo PHP_EOL;

// 这里会报致命错误Fatal error

echo fun();

echo PHP_EOL;

echo "after";

echo PHP_EOL;

}

try {

test();

// 其他的业务逻辑,可能会抛出异常

} catch (Exception $e) {

var_dump(11111);

echo $e->getMessage();

}

运行之后什么都没有输出,而如果把customError方法的throw注释掉,换成echo $res,就没问题,请问为什么不能用throw?并且test方法里面的注释的那些非致命错误使用throw就可以正常输出的?为什么要用throw呢,这是因为try中除了test方法,可能还有其他的业务逻辑会抛出异常,所以我是打算把所有的异常和错误都在catch中进行捕获、错误输出以及错误处理,所以需要customError方法中进行throw抛出异常。

如果把error_reporting(0)注释掉,是可以显示的,如下:

λ php 1_25_allError.php

Fatal error: Uncaught Error: Class 'a' not found in C:\laragon\www\php_book\1_25_allError.php on line 67

Error: Class 'a' not found in C:\laragon\www\php_book\1_25_allError.php on line 67

Call Stack:

0.0000 355368 1. {main}() C:\laragon\www\php_book\1_25_allError.php:0

0.0000 355664 2. test() C:\laragon\www\php_book\1_25_allError.php:79

错误代码: [1] Uncaught Error: Class 'a' not found in C:\laragon\www\php_book\1_25_allError.php:67

Stack trace:

#0 C:\laragon\www\php_book\1_25_allError.php(79): test()

#1 {main}

thrown

错误所在的代码行: 67 文件: C:\laragon\www\php_book\1_25_allError.php

PHP版本:7.1.1(WINNT)

但是也会输出PHP自带的致命错误信息,我是想要屏蔽致命错误信息并且使用自定义异常处理函数即customError来输出致命错误信息的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值