Xinchen Hui es un desarrollador de PHP e ingeniero senior en Baidu, el buscador más usado de China. Hace unos meses propuso agregar "finally" a los specs de PHP. Una de las cosas que le faltaba a PHP comparado con otros lenguajes modernos de desarrollo.

Para los que no lo sepan, la mayoría de los lenguajes orientados a objetos basados en el estandar ECMA o de sintaxis similar a C++/Perl usan las instrucciones try/catch para capturar errores
Código :
<?php $db = mysqli_connect(); try { llamarfuncion($db); } catch (Exception $e) { mysqli_close($db); throw $e; } mysql_close($db);
De tal modo que si "llamarfuncion" falla, el código se dirigirá a "catch" donde se puede controlar lo ocurrido con el error.
El problema con no tener finally es que, en ocasiones, se requiere código que se ejecute cuando ocurra un error esperado o no (Algo por fuera del tipo de error Exception) o si ocurre un break o return. En este caso, si dentro del try hay un "return" que elimine el comportamiento o un continue/break que se salte el try, el finally siempre se ejecutará.
Casos específicos donde es útil es, por ejemplo, en cerrar conexiones a bases de datos.
Código :
<?php $db = mysqli_connect(); try { llamarfuncion($db);// la función puede tener errores por dentro que el try no agarrará } finally { mysqli_close($db); //pero el finally será ejecutado aun así }
El caso del return se puede ver con un ejemplo sencillo:
Código :
<?php try { return 2; } finally { echo "esto funciona\n"; } //this will never be called echo "esto nunca ocurre"; ?>
Eso da como salida:
Código :
esto funciona //return int(2)
Y también funciona si se hacen multiples trys anidados.
La propuesta fue aceptada y se espera que finally esté incorporado en próximas versiones de PHP. Ni idea si alcanzará a estar en un parche de PHP5 o directamente hacia PHP6. Son buenas noticias sin embargo.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Inyaka el 13 de Agosto de 2012
Por kurapika el 13 de Agosto de 2012
Por Jorgen's el 13 de Agosto de 2012
Por David el 13 de Agosto de 2012
@Jorgen's ¿Te dejaste lavar el cerebro por Freddie? ¡Qué triste!
Por rowgm el 14 de Agosto de 2012
Por Ezequiel el 14 de Agosto de 2012