编程语言
首页 > 编程语言> > 为什么在调用未定义函数时没有PHP错误?

为什么在调用未定义函数时没有PHP错误?

作者:互联网

每当调用未定义的函数时,都不会记录错误.而是脚本停止执行.更糟糕的是,如果我运行php -l filename.php,它会显示没有语法错误.我正在使用自定义错误处理程序函数,但即使是第一行也永远不会到达.

当调用未定义的函数时,如何让它运行我的错误处理程序?

我使用的是PHP 5.3.2-1.以下是设置错误处理程序的代码:

error_reporting(-1);
$old_error_handler = set_error_handler( "userErrorHandler" );
set_exception_handler('exception_handler');

虽然它们确实适用于其他错误,但都没有到达错误处理程序和异常处理程序.

我想要这个的原因是我最终不得不在我的代码中放置调试语句以查看它在停止执行之前得到多远这是一个缓慢的过程,而错误消息会告诉我文件和行号错误是.

解决方法:

用户错误处理程序无法捕获致命错误.

http://php.net/manual/en/function.set-error-handler.php

特别是部分:

The following error types cannot be handled with a user defined
function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,
E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the
file where set_error_handler() is called.

根据PHP手册页上的注释,一个解决方法是测试shutdown函数中的错误:

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 0);

    function shutdown(){
        $isError = false;
        if ($error = error_get_last()){
            switch($error['type']){
                case E_ERROR:
                case E_CORE_ERROR:
                case E_COMPILE_ERROR:
                case E_USER_ERROR:
                    $isError = true;
                    break;
            }
        }

        if ($isError){
            echo "Script execution halted ({$error['message']})";
        } else {
            echo "Script completed";
        }
    }

    register_shutdown_function('shutdown');
?>

标签:error-reporting,php
来源: https://codeday.me/bug/20190726/1541312.html