Palabra reservada finally a partir de PHP 5.5

Uno de los cambios solicitados por muchos de los programadores PHP que conocen otros lenguajes como Java, C++ o Delphi, es la inclusión del bloque finally en la gestión de excepciones. A partir de PHP5.5, los bloques **try-catch** pueden definir un nuevo bloque de código bajo la nueva palabra clave **finally**. Lo importante de este bloque es que el código encerrado dentro de finally se ejecuta siempre, independientemente de las excepciones que se produzcan.

Veamos un ejemplo donde se capturan los errores que devuelve la librería de conexión a MySQL:

<?php
echo "ANTES DEL BLOQUE try-catch-finally";
echo "<hr>";

try
{
   $db_connect = mysql_connect('localhost', 'root', '');

   if (!$db_connect)
      throw new Exception('Error de conexión');

   if (mysql_select_db('test', $db_connect) === false) {
      throw new Exception('Error al seleccionar la base de datos');
   }

   $result = mysql_query("SELECT * FROM tabla1", $db_connect);

   if (!$result) {
      throw new Exception('Error en el SQL: SELECT * FROM tabla1');
   }

}
catch (Exception $e)
{
   echo 'Excepción' . ': ' . $e->getMessage() . '<br />';
   echo mysql_error() . '<br />';
}
finally {
   echo "cerramos la conexión<br />";
   mysql_close($db_connect);
}
echo "<hr>";
echo "DESPUES DEL BLOQUE CATCH";
?>

Resultado

ANTES DEL BLOQUE try-catch
________________________________________

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
   use mysqli or PDO instead in exception.php on line 8
Excepción : Error en el SQL: SELECT * FROM tabla1
Table 'test.tabla1' doesn't exist
cerramos conexión
________________________________________
DESPUÉS DEL BLOQUE CATCH

Si no se produce ninguna excepción, la ejecución de la aplicación es la siguiente:

  1. Se ejecuta el código encerrado por el bloque try.
  2. Se ejecuta el código encerrado por el bloque finally.
  3. Se continúa ejecutando el resto de la aplicación.

Si se produce alguna excepción, la ejecución de la aplicación es la siguiente:

  1. Se intenta ejecutar el código del bloque try, pero se produce una excepción.
  2. Se ejecuta el código encerrado por el bloque catch definido para la excepción que se ha producido.
  3. Se ejecuta el código definido por el bloque finally
  4. Se continúa ejecutando el resto de la aplicación o se detiene por completo en función del código ejecutado en el bloque catch anterior (en caso que hayamos puesto un exit o die).

Los bloques finally son muy útiles para asegurar que la aplicación termina correctamente, por ejemplo, se suelen usar para cerrar descriptores de archivos (función fclose()) o cerrar conexiones con bases de datos (función mysqli_close()) tal y como he visto en el ejemplo anterior.

Veamos este mensaje: Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in exception.php on line 8
Gracias a los nuevos niveles de error como el E_DEPRECATED y otros, el propio PHP nos avisa de librerías o funcionalidades que han sido marcadas como "deprecadas" (como la librería php_mysql.dll que al usarla con la versión 5.5 de PHP, dicho PHP nos aconseja que usemos mysqli o PDO como librería de conexión con MySQL). Esta es una de las grandes ventajas de ir actualizando de versión de PHP poco a poco, ya que, la migración de nuestras aplicaciones no tiene porque ser nada complicado ni problemático.

results matching ""

    No results matching ""