php - try - ¿Cómo puedo hacer que set_error_handler() invoque un método en un objeto?
trigger_error() php (3)
Pienso en usar la funcionalidad set_error_handler () en PHP para manejar la mayoría de los errores de PHP en un solo lugar (registrándolos en un archivo). De la documentación parece que puedo pasar un nombre de función a set_error_handler (). ¡Bonito! Pero tengo un objeto ErrorManager que tiene un buen método de registro. Quiero usar ese objeto ErrorManager y escribir un método especial de manejo de errores para él, y hacer que set_error_handler llame a ese ErrorManager.
¿Podría hacer algo así como
set_error_handler($this->customErrorHandler);
? ¿O eso sería inválido?
En PHP 5.3 puedes hacerlo en un cierre:
$that = $this;
set_error_handler( function() use ($that) { $that->customErrorHandler(); } );
Pase una matriz del objeto y el nombre del método que se llamará:
set_error_handler(array($this, ''customErrorHandler''));
php.net/manual/en/function.set-error-handler.php toma una callback :
Algunas funciones, como call_user_func () o usort (), aceptan funciones de devolución de llamada definidas por el usuario como parámetro. Las funciones de devolución de llamada no solo pueden ser funciones simples, sino también métodos de objetos, incluidos métodos de clases estáticas.
Una función de PHP se pasa por su nombre como una cadena. Se puede usar cualquier función incorporada o definida por el usuario, excepto construcciones de lenguaje tales como: array (), echo (), empty (), eval (), exit (), isset (), list (), print () o unset ().
Un método de un objeto instanciado se pasa como una matriz que contiene un objeto en el índice 0 y el nombre del método en el índice 1.
Los métodos de clase estática también se pueden pasar sin instanciar un objeto de esa clase pasando el nombre de clase en lugar de un objeto en el índice 0.
Además de la función común definida por el usuario, create_function () también se puede usar para crear una función de devolución de llamada anónima. A partir de PHP 5.3.0, también es posible pasar un cierre a un parámetro de devolución de llamada.
(énfasis añadido)
set_error_handler
acepta una callback
como parámetro.
Citando esa página:
Un método de un objeto instanciado se pasa como una matriz que contiene un objeto en el índice 0 y el nombre del método en el índice 1.
En su caso, desea una devolución de llamada que corresponda a un método (llamado '' customErrorHandler
'') de un objeto (aquí, $this
) ; la devolución de llamada sería entonces:
array($this, ''customErrorHandler'')
Entonces, usarías esta porción de código:
set_error_handler(array($this, ''customErrorHandler''));