This entry was posted on Thursday, July 17th, 2008 at 2:52 pm and is filed under PHP, Programación, Web Development. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Excepciones en PHP Parte I
La manera simple de manejar un error es usando die( ) cuando éste ocurre, sin embargo, a esto se le conoce como el suicidio del software. Aunque Martin Fowler nos dice que: “Si el costo de que el programa truene es pequeño y el usuario es tolerante así está bien”.
En PHP 5, como en muchos otros lenguajes, tenemos una alternativa al suicidio: Lanzando una excepción. Si no manejamos la excepción con un catch el sistema terminará el programa de la misma manera que die( ), agregándole un trazado de la pila (stack trace). Pero si en un futuro decidieramos manejar cierto error, de esta manera ya sería más sencillo.
¿Como funcionan?
El lenguaje de programaciónsabe que exception es una manera de comunicar un error o condiciones de excepción entre diferentes partes del programa. Por ejemplo, imaginemos que tenemos un método para conectar con una base de datos MySQL.
$db = new DBM;
if ( !$db->connect( ) )
die("Error: no se puede conectar");
else
{
// .....
// --------->
// .....
}
Esta es la versión suicida usando die( ), ahora veamos la versión utilizando el manejo de excepciones:
$db = new DBM;
if ( !$db->connect( ) )
{
throw new Exception(
"ERROR: no se ha podido conectar");
}
else
{
// .....
// --------->
// .....
}
Si no hacemos nada para cachar la excepción, esto tiene el mismo efecto que die( ): Para la aplicación, además, este método hace una cosa adicional, imprime un stack trace, la cual puede ser muy usable para el debugging. Puedes obtener un stack trace sin usar excepciones usando las funciones debug_backtrace( ) y debug_print_backtrace( ). Pero lanzando una excepción es aún más sencillo de hacerlo.
Fatal error: Uncaught exception 'Exception' with message
'Error: no se ha podido conectar' in /path/exception.php:6
Stack trace:
#0 /path/exception.php(6): DBM::connect()
#1 /path/exception.php(12): DBM->connect()
#2 {main}
thrown in /path/exception.php on line 6
Si no queremos que los usuarios vean estos errores técnicos (por cierto no deberíamos por cuestiones de seguridad), estamos en una mejor posición por haber usado excepciones que usar die( ). Si hemos usado die( ) en muchos lugares, tenemos que encontrar todas las ocurrencias y cambios en cada una. Si usamos excepciones, todo lo que necesitamos es cacharlas en algún lugar conveniente, por ejemplo, pudieramos registrar el mensaje y redireccionar al usuario a una pagina de error.
$db = new DBM;
try
{
$db->connect( );
}
catch (Exception $e)
{
$logger->log($e->getMessage());
header("Location: error.php");
}
Como podrán ver el manejo de excepciones es algo imprescindible en el desarrollo de aplicaciones, ya que manejas de una manera más elegante los errores que surjan dentro de la aplicación. En próximas entregas les mostraré más ejemplos y profundizaré en el manejo de excepciones en PHP.
Leave a Reply
Ayuda a mantener este espacio
