Comunidad de diseño web y desarrollo en internet online

PHP incluye "finally" a la instrucción "try/catch"

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.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate