Я думаю об использовании функции set_error_handler () в PHP, чтобы обрабатывать большинство ошибок PHP в одном месте (записывая их в файл). Из документации это выглядит, если я могу передать имя функции set_error_handler (). Ницца! Но у меня есть объект ErrorManager, который имеет хороший метод ведения журнала. Я хочу использовать этот объект ErrorManager и написать для него специальный метод обработчика ошибок, а set_error_handler вызывает ErrorManager.
Могу ли я просто сделать что-то вроде
set_error_handler($this->customErrorHandler);
? Или это будет недействительным?
Перейдите в массив объекта и имя метода, которое нужно вызвать:
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'));