Todos cometemos errores en un momento u otro, es imposible no hacerlo. Lo importante es saber solucionarlos, y para solucionarlos lo primero que hay que hacer es saber que significan los mensajes de error. En este artículo veremos los tipos de error que se pueden dar en PHP y que implicaciones tienen.

Clasificación de los errores en PHP

Los errores en PHP se clasifican en tres grandes grupos: Fatal error, Warning y Notice.

1

Fatal error

Los errores tipo Fatal error (error fatal o crítico) son errores que pueden comprometer seriamente el funcionamiento del programa y por ello, para prevenir males mayores, se aborta la ejecución y el programa deja de funcionar por completo. Es el nivel de error más alto.

Ejemplos comunes de este tipo de error son intentar ejecutar una función que no ha sido definida (Fatal error undefined function) o intentar inicializar un objecto de una clase que no exsite (Fatal error class not found). Por ejemplo:

<?php
function unaFuncion() {
    return true;
}
//La siguiente funcion no existe y se genera un error Fatal
otraFuncion();
?>

Por defecto, cualquier instalación de PHP tiene activado el reporte de errores fatales y, dada su importancia, se recomienda tenerlos activados incluso en servidores en producción.

Dependiendo de dónde se genere el error, se pueden distinguir varios tipos de Fatal error que se identifican con las siguientes constantes:

  • E_ERROR: error crítico generado en tiempo de ejecución. Son generados por el motor intérprete de PHP.
  • E_CORE_ERROR: error crítico que ocurre durante el arranque inicial de PHP. Son generados por el core de PHP.
  • E_COMPILE_ERROR: error crítico que ocurre en tiempo de compilación y son generados por el Zend Engine.
  • E_USER_ERROR: error crítico generado por la función trigger_error(), utilizado por el desarrollador para generar errores fatales personalizados.
  • E_RECOVERABLE_ERROR: es un error crítico recuperable, un error potencialmente peligroso pero que no deja al programa en un estado inestable. Lo importante de este tipo de errores es que pueden ser capturados si se ha definido un gestor de errores (set_error_handler()) y aquí el programador puede decidir que hacer, si seguir con la ejecución o no. Si no se ha definido un gestor de errores, los E_RECOVERABLE_ERROR se tratarán como E_ERROR y se abortará el programa.
2

Warning

Los errores tipo Warnings (Advertencia) son errores menos severos que los errores fatales y no suponen la terminación del programa. Esto no quiere decir que no puedan ser graves. El programa sigue su curso pero puede no funcionar correctamente o ser la causa de que más adelante se produzcan erorres más graves.

Por ejemplo, intentar incluir un archivo mediante include() con una ruta errónea:

<?php
//Genera un error tipo Warning
include('/ruta/hacia/un/archivo/inexistente.php');
?>

Si se utiliza require() en lugar de include(), el error generado es tipo Fatal:

<?php
//Genera un error tipo Fatal error
require('/ruta/hacia/un/archivo/inexistente.php');
?>

Una instalación PHP estándar tiene activado los errores tipo Warning y deberían estar activados siempre en entornos de desarrollo.

Al igual que los errores Fatales, los Warnings se pueden clasificar en función de dónde son generados:

  • E_WARNING: generados en tiempo de ejecución.
  • E_CORE_WARNING: generados por el núcleo de PHP durante el arranque inicial.
  • E_COMPILE_WARNING: generados en tiempo de compilación por Zend Engine.
  • E_USER_WARNING: generado por la función trigger_error().
3

Notice

Los errores tipo Notice (Aviso) son los errores de menor nivel de gravedad. Señalan la presencia de un posible error pero que podrían ocurrir también de forma normal en la ejecución del programa. La aparición de errores Notice no supone la terminación del programa y, aunque no suelen ser fuente de problemas serios, pueden hacer que el programa no funcione exactamente como deseamos.

Puede que el error Notice más común sea la referencia a variables no definidas:

<?php
$name = "Manolo";
//$nombre es una variable que no ha sido definida antes de su uso. Su valor es NULL.
echo 'Tu nombre es ' . $nombre;
?>

Dada su relativa baja gravedad, al instalar PHP los errores tipo Notice vienen desactivados por defecto pero se recomienda activarlos durante el desarrollo pues, aunque sean leves, no dejan de ser errores que pueden hacer que nuestro programa no funcione exactamente como habíamos diseñado o que no sea compatible con futuras versiones de PHP.

Según dónde se generen, los errores Notice pueden ser:

  • E_NOTICE: generados en tiempo de ejecución.
  • E_USER_NOTICE: generados por la función trigger_error().
  • E_STRICT: si se habilita, PHP generará avisos en tiempo de ejecución sugiriendo cambios para que el código se ajuste de forma estricta a los estándares PHP, lo que aumentará la compatibilidad del código con futuras versiones de PHP.
  • E_DEPRECATED: si se habilita, PHP generará avisos en tiempo de ejecución indicando partes de código utilizado que dejará de funcionar en futuras versiones de PHP.

Durante el arranque inicial de PHP o en la compilación por el motor Zend nunca se generan errores tipo Notice.

4

Parse

Los erres tipo Parse (Analizar) son errores del analizador del núcleo de PHP y suponen la terminación del programa.

Los errores del analizador más comunes son errores de sintaxis. Por ejemplo:

<?php
//Falta el ")" en la definición de la función, generará un Parse syntax error
function myFunction( {
    $name = "Manolo";
    return $name;
}
?>

Más información