Cette fonctionnalité, à mainte reprise sollicitée par la communauté, vient d'être officiellement intégrée au langage après un vote favorable ce lundi. Sa RFC (demande de commentaires) a reçu 25 oui (dont celui de Rasmus Lerdorf) contre 5 refus.
finally permet d'éviter au développeur d'écrire un code de nettoyage lorsqu'une exception non manipulable se produit, comme illustré dans le code suivant :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | $db = mysqli_connect(); try { call_some_function($db); } catch (Exception $e) { mysqli_close($db); throw $e; } mysqli_close($db); |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | $db = mysqli_connect(); try { call_some_function($db); //La fonction peut produire des exceptions sur lequelles on ne peut intervenir anticiper } finally { mysqli_close($db); } |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | try { return 2; } finally { echo "this will be called\n"; } //this will never be called echo "you can not see me"; |
On peut envisager des scénarios plus sophistiqués, avec un cas imbriqué :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function foo ($a) { try { echo "1"; try { echo "2"; throw new Exception("ex"); } catch (Exception $e) { echo "3"; } finally { echo "4"; throw new Exception("ex"); } } catch (Exception $e) { echo "3"; } finally { echo "2"; } return 1; } var_dump(foo("para")); |
Ce commit n'a pas engendré l'annonce (ou le lancement) d'une nouvelle version du langage. Les plus téméraires peuvent compiler la dernière branche du langage à partir de son code source.
Source : finally sur le wiki de PHP
Et vous ?
Que pensez-vous de l'intégration de ce mot clé en PHP ?
Comment faisiez-vous sans sa présence ?