Вы также можете отслеживать устаревшие сообщения об ошибках с помощью 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 error-handler-deprecated.php
в PHP 5.3 затем приводит к следующему выводу, поскольку вы можете видеть, что обработчик ошибок обрабатывает все эти устаревшие сообщения рядом с другими ошибками:
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)
-----------------------------------