Подтвердить что ты не робот

Как я могу заставить set_error_handler() вызывать метод для объекта?

Я думаю об использовании функциональности set_error_handler() в PHP для обработки большинства ошибок PHP в одном месте (запись их в файл). Из документации видно, что я могу передать имя функции в set_error_handler(). Приятно! Но у меня есть объект ErrorManager, у которого есть хороший метод регистрации. Я хочу использовать этот объект ErrorManager, написать для него специальный метод-обработчик ошибок и заставить set_error_handler вызвать его ErrorManager.

Могу я просто сделать что-то вроде?:

set_error_handler($this->customErrorHandler);

Или это будет недействительным?

4b9b3361

Ответ 1

Передайте массив объекта и имя метода, которое будет вызываться:

set_error_handler(array($this, 'customErrorHandler'));

set_error_handler() принимает callback:

Некоторые функции, такие как call_user_func() или usort() принимают определяемые пользователем функции обратного вызова в качестве параметра. Функции обратного вызова могут быть не только простые функции, но и объект методы, включая статический класс Методы.

Функция PHP передается по имени как строка. Любой встроенный или пользовательская функция может использоваться, кроме языковых конструкций, таких как: array(), echo(), empty(), eval(), exit(), isset(), list(), print() или снята с охраны().

Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и имя метода при индексе 1.

Статические методы класса также могут быть передается без экземпляра объекта этого класса, пройдя класс вместо объекта с индексом 0.

Помимо общих пользовательских функция, create_function() также может использовать для создания анонимного функция обратного вызова. Начиная с PHP 5.3.0 он можно также передать закрытие параметр обратного вызова.

(выделено курсивом)

Ответ 2

В PHP 5.3 вы можете сделать это в закрытии:

$that = $this;
set_error_handler( function() use ($that) { $that->customErrorHandler(); } );

Ответ 3

set_error_handler принимает callback как параметр.

Цитирование этой страницы:

Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и имя метода при индексе 1.


В вашем случае вам нужен обратный вызов, соответствующий методу (Called 'customErrorHandler') объекта (здесь $this); обратный вызов будет тогда:

array($this, 'customErrorHandler')

Итак, вы должны использовать эту часть кода:

set_error_handler(array($this, 'customErrorHandler'));