Manejador de errores no capturados en PHP 7

Si bien ahora se puede detectar una gran cantidad de Error a través de try … catch, también hay un mecanismo adicional para manejar los errores. PHP proporciona un mecanismo en forma de una función set_error_handler() que nos permite definir una función de controlador personalizado para todos los errores no detectados. La función set_error_handler() acepta dos parámetros, según la siguiente descripción:

mixed set_error_handler (
callable $error_handler
[, int $error_types = E_ALL | E_STRICT ]
)

La función $error_handler es un nombre de función de controlador pasado como una cadena o una función de controlador anónimo completo, mientras que $error_types es una o más máscaras (separadas por |) que especifican el tipo de error. La función del controlador en sí también acepta varios parámetros, según la siguiente descripción:

bool handler (
int $errno ,
string $errstr
[, string $errfile
[, int $errline
[, array $errcontext ]]]
)

Echemos un vistazo a los siguientes dos ejemplos:

<?php
function handler($errno, $errstr, $errfile, $errline, $errcontext)
{
echo 'Handler: ' . $errstr;
}
set_error_handler('handler', E_USER_ERROR | E_USER_WARNING);
echo 'start';
trigger_error('Ups!', E_USER_ERROR);
echo 'end';
<?php
set_error_handler(function ($errno, $errstr, $errfile, $errline,
$errcontext) {
echo 'Handler: ' . $errstr;
}, E_USER_ERROR | E_USER_WARNING);
echo 'start';
trigger_error('Ups!', E_USER_WARNING);
echo 'end';

Estos ejemplos son casi idénticos. El primero está usando una función de controlador definida por separado, que luego se pasa como un argumento de cadena a set_error_handler(). El segundo ejemplo usa la función anónima con la misma definición. Ambos ejemplos usan la función trigger_error(), una activa E_USER_ERROR y la otra E_USER_WARNING. Cuando se ejecuta, ambas salidas contendrán la cadena final.

Si bien la función de controlador personalizado nos permite manejar todo tipo de errores de tiempo de ejecución, hay algunos errores que no podemos manejar. Los siguientes tipos de error no se pueden manejar con una función definida por el usuario: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING y la mayoría de E_STRICT generada en el archivo donde se llama a set_error_handler().

Comparte