¿Qué es una excepción?
Un error es un resultado de programa inesperado que no puede ser manejado por el programa en sí.
Los errores se resuelven arreglando el programa. Un ejemplo de error sería un bucle infinito que nunca deja de ejecutarse.
Una excepción es el resultado inesperado del programa que puede ser manejado por el propio programa.
Los ejemplos de excepción incluyen intentar abrir un archivo que no existe.
Esta excepción se puede manejar creando el archivo o presentando al usuario la opción de buscar el archivo.
En este tutorial, aprenderá:
- ¿Por qué manejar la excepción?
- Manejo de errores de PHP
- Ejemplos de manejo de errores
- Diferencia entre errores y excepciones
- Varias excepciones
- Probando el código
¿Por qué manejar la excepción?
- Evite resultados inesperados en nuestras páginas que pueden resultar muy molestos o irritantes para nuestros usuarios finales.
- Mejorar la seguridad de nuestras aplicaciones al no exponer información que los usuarios malintencionados pueden usar para atacar nuestras aplicaciones.
- Las Excepciones Php se utilizan para cambiar el flujo normal de un programa si ocurre algún error predecible.
Manejo de errores de PHP
Cuando ocurre un error, dependiendo de sus ajustes de configuración, PHP muestra el mensaje de error en el navegador web con información relacionada con el error que ocurrió.
PHP ofrece varias formas de manejar errores.
Vamos a ver tres (3) métodos de uso común;
- Declaraciones de troquel: la función de troquel combina las funciones de eco y salida en una. Es muy útil cuando queremos generar un mensaje y detener la ejecución del script cuando ocurre un error.
- Controladores de errores personalizados : son funciones definidas por el usuario a las que se llama cuando se produce un error.
- Informe de errores de PHP : el mensaje de error depende de la configuración de informes de errores de PHP. Este método es muy útil en el entorno de desarrollo cuando no tiene idea de qué causó el error. La información que se muestra puede ayudarlo a depurar su aplicación.
Ejemplos de manejo de errores
Veamos ahora algunos ejemplos simples con rutinas de manejo de errores.
Supongamos que hemos desarrollado una aplicación que utiliza archivos de texto para almacenar datos. Es posible que deseemos verificar la existencia del archivo antes de intentar leer datos de él.
El siguiente código implementa el ejemplo anterior.
Suponiendo que guardó el archivo simple_error.php en la carpeta phptuts, abra la URL http: //localhost/phptuts/simple_error.php
Obtendrás los siguientes resultados
Como puede ver en los resultados anteriores, hace que nuestra aplicación parezca poco profesional y puede resultar molesta para el usuario.
Modificaremos el código anterior y escribiremos un controlador de errores para la aplicación.
Suponiendo que guardó el código anterior como error_handling.php, abra la URL http: //localhost/phptuts/error_handling.php
Nota: es una buena práctica de seguridad mostrar un mensaje como el que se muestra arriba en lugar de mostrar un mensaje como "Archivo no encontrado".
Veamos otro ejemplo que usa un controlador de errores personalizado.
El controlador de errores personalizado se establecerá como la función predeterminada de manejo de errores de PHP y básicamente mostrará un número de error y un mensaje.
El siguiente código ilustra la implementación del ejemplo anterior.
Abra la URL http: //localhost/phptuts/custom_error_handler.php obtendrá los siguientes resultados
.
Como puede ver en el ejemplo anterior, los controladores de errores personalizados son poderosos en el sentido de que
- Nos permiten personalizar los mensajes de error.
- El controlador de errores personalizado también puede incluir el registro de errores en un archivo / base de datos, enviar un correo electrónico al desarrollador, etc.
Veamos ahora el tercer tipo de manejo de errores. Usaremos la función PHP incorporada función error_reporting. Tiene la siguiente sintaxis básica
AQUÍ,
- "Error_reporting" es la función de informe de errores de PHP
- "$ Reporting_level" es opcional, se puede utilizar para establecer el nivel de informe. Si no se ha especificado ningún nivel de informe, PHP utilizará el nivel de informe de error predeterminado como se especifica en el archivo php.ini.
Nivel de informes | Descripción | Ejemplo |
---|---|---|
E_ADVERTENCIA | Muestra solo mensajes de advertencia. No detiene la ejecución del script. | error_reporting (E_WARNING); |
E_NOTICE | Muestra avisos que pueden ocurrir durante la ejecución normal de un programa o que podrían ser un error. | error_reporting (E_ AVISO); |
E_USER_ERROR | Muestra errores generados por el usuario, es decir, un controlador de errores personalizado | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Muestra mensajes de advertencia generados por el usuario | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Muestra avisos generados por el usuario | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Muestra errores que no son fatales y que se pueden manejar mediante manejadores de errores personalizados. | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Muestra todos los errores y advertencias. | error_reporting (E_ TODOS); |
Diferencia entre errores y excepciones
- Se lanzan excepciones y se pretende que se detecten, mientras que los errores son generalmente irrecuperables.
-
Las excepciones se manejan de forma orientada a objetos.
Esto significa que cuando se lanza una excepción; Se crea un objeto de excepción que contiene los detalles de la excepción.
La siguiente tabla muestra los métodos de objeto de excepción
Método | Descripción | Ejemplo |
---|---|---|
getMessage () | Muestra el mensaje de la excepción. |
getMessage();?> |
getCode () | Muestra el código numérico que representa la excepción. |
getCode();?> |
Obtener el archivo() | Muestra el nombre del archivo y la ruta donde ocurrió la excepción. |
getFile();?> |
obtener línea() | Muestra el número de línea donde ocurrió la excepción. |
getLine();?> |
getTrace () | Muestra una matriz del backtrace antes de la excepción. |
getTrace());?> |
getPrevious () | Muestra la excepción anterior antes de la actual |
getPrevious();?> |
getTraceAsString () | Muestra el seguimiento de la excepción como una cadena en lugar de una matriz. |
getTraceAsString();?> |
__Encadenar() | Muestra toda la excepción como una cadena. |
__toString();?> |
A continuación se muestra la sintaxis básica para lanzar una excepción.
AQUÍ,
- "Lanzar" es la palabra clave utilizada para lanzar la excepción
- "Nueva Excepción (…)" crea un objeto de excepción y pasa la cadena "Este es un ejemplo de excepción" como parámetro del mensaje.
El código anterior genera el siguiente mensaje.
Ahora veremos un ejemplo que implementa las excepciones throw y catch.
Modificaremos el ejemplo anterior e incluiremos el try, throw y catch.
Tiene la siguiente sintaxis básica.
AQUÍ,
- "Try {…}" es el bloque de código que se ejecutará y que podría generar una excepción.
- “Catch (Exception $ e) {…}” es el bloque de código que detecta la excepción lanzada y asigna el objeto de excepción a la variable $ e.
El siguiente código muestra el ejemplo de excepción básica con la excepción try, throw y catch implementada.
El programa lanza deliberadamente una excepción que luego detecta.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Abra la URL http: //localhost/phptuts/exception_handling.php Obtendrá los siguientes resultados.
También es posible crear múltiples excepciones para una declaración php try dependiendo del tipo de excepción lanzada.
Consulte el artículo sobre MySQL, acceso a datos PHP
… Para ejemplos de implementación de múltiples excepcionesVarias excepciones
Las excepciones múltiples usan múltiples bloques try catch para manejar las excepciones lanzadas. Varias excepciones son útiles cuando;
- Desea mostrar un mensaje personalizado según la excepción lanzada
- Desea realizar una operación única en función de la excepción lanzada
El diagrama de flujo a continuación ilustra cómo funcionan varias excepciones
Veamos un ejemplo que usa múltiples excepciones.
Modificaremos el código que divide un número por el denominador pasado.
Esperamos que ocurran dos tipos de excepciones;
- División por cero
- División por un número negativo
En aras de la simplicidad, solo mostraremos el tipo de excepción en nuestros bloques de captura.
El PHP integrado en la clase Exception se usa para lanzar excepciones.
Crearemos dos clases que extienden la clase de excepción y las usaremos para lanzar excepciones.
El siguiente código muestra la implementación.
Probando el código
Asumiremos que guardó multiple_exceptions.php en la carpeta phptuts.
Busque la URL http: //localhost/phptuts/multiple_exceptions.php
Vuelva al archivo PHP y pase -1 como parámetro como se muestra en el siguiente diagrama.
Busque la URL http: //localhost/phptuts/multiple_exceptions.php .
¿Qué resultados obtienes? Pase 3 como parámetro.
¿Qué resultados obtienes?
Resumen
- Los errores son resultados inesperados producidos por el código PHP
- El manejo de errores mejora el rendimiento de la aplicación
- PHP tiene funciones integradas que se pueden usar para personalizar la forma en que PHP informa errores
- Las excepciones son como errores, pero pueden detectarse usando el bloque catch cuando se lanzan.
- La visualización de mensajes de error que muestran información sobre errores se considera una mala práctica de seguridad.