Operadores de Control de Errores

PHP soporta un operador de control de errores: el signo de arroba (@). Cuando se antepone a una expresión en PHP, cualquier mensaje de error que pueda ser generado por esa expresión será ignorado.

Si se ha establecido una función controladora de errores personalizada con set_error_handler(), esta todavía se seguirá llamando aunque se haya suprimido el diagnóstico.

Advertencia

Antes de PHP 8.0.0, la llamada a error_reporting() dentro del manejador de errores personalizado siempre devolvía 0, si el error era suprimido por el operador @. Desde PHP 8.0.0, devuelve el valor de esta expresión (bit a bit): E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE.

Cualquier mensaje de error generado por la expresión está disponible en el elemento "message" del array devuelto por error_get_last(). El resultado de dicha función cambiará con cara error, por lo que necesita se comprobado lo antes posible.

<?php
/* Error intencionado en file */
$my_file = @file ('non_existent_file') or
die (
"Error al abrir el archivo: se produjo un error '" . error_get_last()['message'] . "'");

// Esto funciona para cualquier expresión, no solo funciones:
value = @$cache[$key];
// No emitirá ningún aviso si el índice $key no existe.

?>

Nota: El operador @ trabaja sólo sobre expresiones. Una simple regla de oro es: si se puede tomar el valor de algo, entonces se le puede anteponer el operador @. Por ejemplo, puede anteponerse a variables, a llamadas a funciones, a llamadas a ciertas constructores del lenguaje (p.ej. includes) y así sucesivamente. No puede anteponerse a definiciones de función o clase, ni a estructuras condicionales como if y foreach, y así sucesivamente.

Advertencia

Antes de PHP 8.0.0, era posible mediante el operador @ deshabilitar errores críticos los cuales terminan la ejecución del script. Por ejemplo, anteponiendo @ a una llamada a una función la cual no existe, al no estar disponible o estar mal escrito, el script terminaría sin ninguna indicación de por qué.