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

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

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

set_error_handler($this->customErrorHandler); 

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

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

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

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

set_error_handler() выполняет обратный вызов :

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

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

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

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

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

(выделено мной)

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

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

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

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

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

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

 array($this, 'customErrorHandler') 

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

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