|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||||
![]() ![]() Tarik Zakaria BenmerarCEO Inscription : juillet 2012 Messages : 78 ![]() |
PHP intègre désormais un bloc "Finally"
Pour une gestion plus propre des sorties d'exceptions Xinchen Hui, développeur du projet PHP, a commité hier l'introduction du mot clé "finally" dans le corps du langage. 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 :
Code :
Code :
On peut envisager des scénarios plus sophistiqués, avec un cas imbriqué : Code :
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 ?
|
||||||||
|
|
90
|
|
|
#2 |
|
Membre éclairé
![]() Développeur informatique Inscription : décembre 2011 Messages : 237 ![]() |
Que pensez-vous de l'intégration de ce mot clé en PHP ?Je pense que c'est une bonne nouvelle, les développeurs PHP (ou autres ) reprochaient souvent le manque du mot-clé finally. Comment faisiez-vous sans sa présence ?"Comme tout le monde ?" J'ai envie de dire... en se débrouillant. Pour ma part je n'ai pas eu beaucoup l'occasion de rencontrer les problèmes cités en PHP. En même temps, comment font ceux qui font du C++ et qui n'ont toujours pas le bloc finally ? |
|
|
21
|
|
|
#3 |
|
Membre du Club
![]() Inscription : mai 2012 Messages : 11 ![]() |
Quand il n'y a pas de finally, ben une simple condition.
Mais bon, en ce qui me concerne je l'ai en C#. Mais c'est une bonne nouvelle de l'avoir en php. |
|
|
11
|
|
|
#4 | ||
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 182 ![]() |
En C++ on fait du RIIA, c'est à dire une classe encapsulant la ressource.
Le finally est implicite: destruction de toute les variables locales. L'équivalent c++ de : Code :
Parce que le destructeur de cx sera appelé à la sortie du bloc d'accolade.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
||
|
41
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 401 ![]() |
c'est pas mal...mais c'est pas prêt d'arriver sur l'ensemble des hébergeurs et clients
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
20
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 13 ![]() |
je trouve aussi que c'est une bonne chose, que les développeurs de différents langages retrouvent leurs habitudes, le souci restant que les fonctions natives de php ne jettent pas nécessairement d'exception lors de problèmes rencontrés (certaines jouent sur la valeur de retour, certaines jettent l'exception).
tant que ce souci ne sera pas résolu, php sera toujours en retard au niveau des exceptions de mon point de vue. |
|
30
|
|
|
#7 |
|
Membre émérite
![]() Développeur informatique Inscription : octobre 2008 Messages : 175 ![]() |
finally...
(désolé. pas pu m'en empêcher )
|
|
|
101
|
|
|
#8 |
|
Membre éclairé
![]() Sylvain MachefertDéveloppeur Java Inscription : janvier 2003 Messages : 380 ![]() |
C'est une belle avancée, mais bien d'accord avec arkadih
J'ai pas souvenir d'avoir utilisé des exceptions en PHP, faut dire que ça fait un bail que je n'en ai pas fait à un gros niveau. En java je ne peux me passer du finally, mais toutes les fonctions jettent des exceptions (erreur de syntaxe sql, erreur de connexion à la BDD...), en PHP il faudra tester les valeurs de retour et déclencher soi-même l'exception.
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu |
|
10
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2011 Messages : 22 ![]() |
Pas sur de la pertinence de la chose en PHP.
y'a une bonne partie des dev' PHP qui ne savent même pas ce qu'est un try..catch...
|
|
|
24
|
|
|
#10 | |
![]() ![]() ![]() |
Citation:
D'ailleurs, un finally n'est pas toujours la meilleure chose au monde : si on met un return dans les blocs try ou catch, le contenu du finally sera exécuté avant le retour de fonction, c'est-à-dire qu'on ne peut plus suivre simplement le fil d'exécution du code (ça vous rappelle GOTO ?). |
|
|
22
|
|
|
#11 | |
|
Membre actif
![]() Inscription : décembre 2010 Messages : 89 ![]() |
Citation:
|
|
|
|
72
|
|
|
#12 |
|
Membre actif
![]() Inscription : décembre 2010 Messages : 89 ![]() |
Il y a des exceptions généré directement par les méthodes de l'API, comme PDOException pour les erreur sql, mais ouais c'est un peu brouillon et pas forcément uniforme.
|
|
|
10
|
|
|
#13 |
|
Membre du Club
![]() Mickaël WolffDéveloppeur informatique Inscription : juin 2012 Messages : 11 ![]() |
Je n'ai jamais compris l'intérêt de finally. Comme en a parlé leternel, le RIIA est fait pour ça. Utiliser les exception sans RIIA, c'est un peu un non-sens.
Ceci dit, PHP est un langage sale, à rustine. Et plutôt que d'avoir une gestion du scope de variables cohérent, un emplâtre finally est rajouté... |
|
|
13
|
|
|
#14 | ||
|
Expert Confirmé
![]() Baptiste ROUSSELDéveloppeur Temps réel Embarqué Inscription : janvier 2011 Messages : 1 293 ![]() |
Citation:
Tu préferrai utiliser du throw à plus savoir quoi en faire et tout gérer toutes les exceptions dans ton point d'entrée ? Cela résoud pas tous les problèmes, ça complique même beaucoup pour certains traitements... Edit pour en dessous et expliciter mon message : Citation:
Personnelement je préfère d'autant plus les codes de retours que c'est la philosophie des OS unix et codes que j'utilise dans mon travail (je suis pas dev web, je n'en fais qu'à mes heures perdues les weekends).
__________________
|
||
|
|
22
|
|
|
#15 |
![]() ![]() Inscription : juin 2002 Messages : 2 034 ![]() |
Si tu ne sais pas quoi faire de l'exception à cet endroit et que tu cherches juste à la faire remonter dans les couches supérieures, pourquoi la catcher et la convertir en code de retour [1] ? Pourquoi ne pas laisser le mécanisme d'exception propager l'erreur jusqu'à une couche qui est capable d'en faire quelque-chose ? c'est bien là le rôle des exceptions.
[1] si on laisse de côté la cas particulier du code à la frontière entre un module avec exception et un qui ne les gère pas et le code historique bien entendu. |
|
|
30
|
|
|
#16 | |
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 182 ![]() |
Citation:
Du coup, le RIIA y est totalement irréalisable. Bien plus que l'absence d'héritage multiple, c'est ca qui m'énerve le plus en Java...
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
|
50
|
|
|
#17 | |
![]() ![]() Inscription : juin 2002 Messages : 2 034 ![]() |
Citation:
Idem en C# avec le using dont l'utilisation me semble plus large que le try-with-resource. La différence entre ces mécanismes et le RAII tel que présent en C++ est que le choix d'utiliser ou non ce mécanisme est fait à l'acquisition de la ressource alors qu'en C++ il est fait dans le design de la classe. |
|
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 182 ![]() |
J'oubliais ces subtilités, parce que, pour mon plus grand plaisir, je suis actuellement sur un projet développé en java 1.4, sur une JVM personalisé, et que je pleure assez régulièrement de devoir écrire toute les cochoncetés que Java 5 avait supprimé.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#19 |
|
Inscription : octobre 2011 Messages : 46 ![]() |
Dans quelle version de PHP, le bloc finally sera incorporé ?
Dans la dernière version en date (PHP 5.4.6), ce bloc n'est toujours pas accepté. Avez-vous une idée de sa sortie ? |
|
|
00
|
|
|
#20 | |
|
Expert Confirmé
![]() Baptiste ROUSSELDéveloppeur Temps réel Embarqué Inscription : janvier 2011 Messages : 1 293 ![]() |
Citation:
__________________
|
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com