为什么这个error_handler函数返回NULL?

时间:2018-10-15 09:40:25

标签: php exception error-handling

我有一个名为Error的类,该类在加载时将使用PHP中的errorHandler方法注册一个名为set_error_handler的函数。但是,如果函数加载失败或PHP使用默认的内置错误处理程序,则此函数将返回NULL。我无法弄清楚为什么我的功能没有被接受。有人有什么好猜测吗?

<?php
declare (strict_types = 1);

namespace Request\Configuration;

use Errors\Exception\FatalException;

class Error extends Template
{
    public static function load(): void
    {
        $result = set_error_handler('self::errorHandler', error_reporting());
        var_dump($result);
    }

    public static function errorHandler(
        int $number,
        string $message,
        string $file = null,
        int $line = null,
        array $context = null
    ) {
        throw new FatalException('PHP_ERROR: ' . $message, 0);
    }
}

此类在加载时返回NULL

1 个答案:

答案 0 :(得分:0)

好吧,经过大量的调试和探索,我找到了造成这种情况的原因。 set_error_handler()函数将仅在注册新函数之前返回当前的错误处理函数。这是一个奇怪的功能。因此,如果要确定注册是否成功,则必须调用此函数两次。因此,当此函数返回NULL时,是因为先前注册的函数是PHP的内置函数,所以它仅返回了NULL。请注意,这是一个奇怪的功能。