您也可以使用set_error_handler() 跟踪已弃用的错误消息。您描述的问题是,这些贬损消息是在您注册错误处理函数之前给出的。
您命名的两条消息是在解析时给出的。这意味着如果您注册错误处理函数的时间太晚,您将无法再处理它们(因为它们已经通过了)。
因此解决方案很简单:在解析这些文件之前注册您的错误处理程序。工作示例:
文件error-handler-deprecated-include.php:
<?php
# 1. Assigning the return value of new by reference is now deprecated.
$var = &new stdClass();
# 2. Call-time pass-by-reference is now deprecated
trim(&$var);
文件error-handler-deprecated.php:
<?php
$handler = function($errno, $errstr, $errfile, $errline) {
echo "Error: ", var_dump($errno, $errstr, $errfile, $errline),
"-----------------------------------\n";
};
echo 'set_error_handler() [previous handler]: ',
var_dump(set_error_handler($handler));
# test 1. and 2. by including the code *after* the error handler has been set
include('error-handler-deprecated-include.php');
在 PHP 5.3 下运行 php error-handler-deprecated.php 然后会产生以下输出,您可以看到错误处理程序正在处理其他错误旁边的所有那些已弃用的消息:
set_error_handler() [previous handler]: NULL
Error: int(8192)
string(60) "Assigning the return value of new by reference is deprecated"
string(98) "error-handler-deprecated-include.php"
int(7)
-----------------------------------
Error: int(8192)
string(47) "Call-time pass-by-reference has been deprecated"
string(98) "error-handler-deprecated-include.php"
int(10)
-----------------------------------
Error: int(2)
string(53) "trim() expects parameter 1 to be string, object given"
string(98) "error-handler-deprecated-include.php"
int(10)
-----------------------------------