带警报的自定义PHP错误处理程序

时间:2014-03-08 00:15:25

标签: javascript php

我想启动一个包含所有PHP错误信息的JavaScript警告框。我已经设法使用PHP的set_error_handler(),但它一直在启动默认错误,并且它不会让我选择其他可能性。

set_error_handler(custom_error_handler());

function custom_error_handler($errno, $string, $file, $line)
{
    switch ($errno)
    {
        case E_ERROR:
        case E_USER_ERROR:
            echo "ERROR";
        break;

        case E_WARNING:
        case E_USER_WARNING:
            echo "WARNING";
        break;

        case E_NOTICE:
        case E_USER_NOTICE:
        case E_DEPRECATED:
        case E_USER_DEPRECATED:
        case E_STRICT:
            echo "NOTICE";
        break;

        default:
            echo "WTF?";
        break;
    }

    return true;
}

ini_set("display_errors", "0");
error_reporting(E_ALL);

trigger_error("Hello, Error!", E_USER_NOTICE);

2 个答案:

答案 0 :(得分:1)

如果您的switch case语句未涵盖某种类型的错误,则此错误处理程序仅显示Javascript错误。由于您引发了E_USER_NOTICE,您只需将文本“NOTICE”作为页面的输出,这显然不会显示在警报中。

此外,正如R. Barzell在答案中提到的那样,在custom_error_handler)注册错误处理程序时,应该省略括号。除此之外,您可能需要在声明函数'custom_error_handler'之后调用set_error_handler(custom_error_handler);

答案 1 :(得分:0)

从set_error_handler调用中的“custom_error_handler”中删除()。如:

set_error_handler(custom_error_handler);

内部函数末尾的()实际上是对它进行求值,而不是将其设置为回调。

任何时候想要将函数传递给另一个函数,都不要使用()。只有在想要评估函数时才添加它,并将其结果传递给函数。