Errores y mensajes de error

Errores en un programa

Los ordenadores no poseen inteligencia ni sentido común, se limitan a ejecutar las instrucciones contenidas en el programa. Por ello, los programas no pueden contener errores ni ambigüedades y tienen que tener previstos todas las posibles situaciones.

Algunos errores de programación no pueden ser detectados por los compiladores o intérpretes (por ejemplo, si un programa tiene que calcular una suma y el programador ha escrito una multiplicación en vez de la suma el programa no dará el resultado correcto pero el compilador no puede saberlo), pero otros sí. En esta lección se comentan los errores que detectan los compiladores o intérpretes, avisando al programador o al usuario de su existencia.

Podemos distinguir dos tipos de errores:

Entre los errores no sintácticos, se pueden distinguir varios tipos de errores:

A continuación se comentan algunos mensajes de error.

Mensajes de error

Cuando PHP encuentra errores en un programa, PHP puede generar un mensaje de error que se incluye en la página en el punto en que se ha encontrado el error. El error incluye una descripción del error y el número de línea en el que PHP ha encontrado el error, lo que facilita al programador su corrección (el número de línea indica la línea en que PHP se da cuenta de que hay un error, pero el error puede estar en una línea anterior a la indicada por PHP).

La directiva error_reporting del fichero de configuración de PHP php.ini permite establecer qué tipos de error generarán un mensaje de error. Como se comenta en la lección de configuración de PHP:

Antes de ejecutar un programa, PHP analiza el programa en busca de errores sintácticos (llaves, paréntesis o comillas sin cerrar, etc). Un error sintáctico es un error fatal, que detiene el propio análisis y lo único que obtendremos será el mensaje de error. Si un programa contiene varias errores sintácticos, PHP sólo muestra el mensaje de error del primer error. Una vez corregido el primer error, al volver a ejecutar el programa se mostrará el mensaje del segundo error y así sucesivamente hasta corregir todos los errores sintácticos.

Si un programa no contiene errores sintácticos, PHP ejecuta el programa. Durante la ejecución del programa PHP puede encontrar un error que impida la ejecución del resto del programa o encontrarse con un error que no impida la ejecución del programa. En el primer caso, el navegador mostrará el contenido de la página generado hasta el error, el mensaje de error y nada más. En el segundo caso, el navegador mostrará el contenido de la página completo, con el mensaje de error insertado en el lugar en el que se produjo (dependiendo de la estructura de la página, el mensaje de error puede ser visible únicamente en el código fuente).

Por supuesto, que un programa no genere mensajes de error no significa que el programa funcione correctamente, pero si genera mensajes de error probablemente no funcionará correctamente.

Errores fatales en tiempo de ejecución (E_ERROR: Fatal run-time errors)

Los errores fatales son errores que impiden y detienen la ejecución del programa.

Errores sintácticos (E_PARSE: Parse errors)

Un programa está formado por las palabras reservadas del lenguaje, cadenas, variables, constantes o funciones, paréntesis, llaves, corchetes, signos de puntuación, operadores, etc, que además deben sucederse en un orden determinado. Los errores sintácticos se producen cuando el compilador no encuentra los símbolos (tokens) esperados o encuentra otros en su lugar.

En el manual de PHP se encuentra la lista de palabras reservadas (keywords), la lista de constantes predefinidas, la lista de clases predefinidas y la lista de tipos de símbolos (tokens).

Cuando encuentra un símbolo no esperado, PHP indica el tipo de símbolo que ha encontrado sin esperarlo.

Los paréntesis, llaves y corchetes deben estar emparejados (por cada signo abierto debe hacer uno cerrado).

Advertencias (E_WARNING: Warnings)

Estos avisos indican que se ha producido un error de algún tipo que no impide la ejecución del resto del programa, aunque seguramente el programa no producirá el resultado esperado.

Avisos (E_NOTICE: Notices)

Los avisos no impiden la ejecución de un programa, aunque seguramente el programa no producirá el resultado esperado.

Obsolescencias (E_STRICT: Strict / E_DEPRECATED: Deprecated)