Finalement... finally ?
Par NiKo le mercredi 5 octobre 2005, 01:28 - Dev
- Lien permanent -
17 commentaires -
Tags :
En PHP5, j'utilise les blocs try et catch pour intercepter mes exceptions. Mais qu'en est-il de finally, permettant d'effectuer une opération malgré les exceptions et existant dans d'autres langages comme Java ? La fonction ne semble pas implémentée en PHP...
En l'occurence, il s'agit de fermer une connexion au SGBD si d'autres opérations que la connexion elle-même ont généré des exceptions... bloquantes. ce qui laisse une connexion non-fermée - ce qui est mal. En même temps, gérer la fermeture propre de la connexion dans la classe de gestion d'exceptions, c'est pas très propre, et ça peut vite devenir le bazar si on veut effectuer d'autres opérations dans le même genre ?
Des idées, suggestions pour pallier à ce souci ? 
Note : le premier qui me répond Passer à Java, je le mord ![]()
17 commentaires (Ajouter un commentaire)
Bon, toujours est-il que pour mon histoire de finally, vu que ça n'existe pas je gère mes finalisations dans mes classes d'exception, par le biais d'un callback maison pas très propre mais fonctionnel. J'éspère que
finallysera implémenté en php6Mais au fait, on est complètement hors-sujet là : le bon, il est là
Oui, d'ailleurs il est prévu qu'il porte le double patronyme : Perriault-Le Meur ou Le Meur-Perriault.
Mais dans tous les cas, Oussama : non. Ni Benito, Ni Adolf, ni Saddam
> Oussama Perriault, ça sonne grave bien
Il peut aussi porter le patronyme de sa mère.
Concernant le billet, quel est "finallement" le dénouement de la problématique NiKo?
Daladi Rladada > Ouais, Oussama Perriault, ça sonne grave bien
Ma chérie, si tu lis ce commentaire : JE RIGOLE
je ne suis pas programeur. De ce point de vu là, ce billet est très drôle.
Excellent blog, souvent mdr en lisant et félicitation pour le bébé! Pour le prénom c'est toujours mieux qd c facile à porter, limite consensuel et original en meme temps.... Alphonse? Oussama? Bon courage pour le choix...
J'étais persuadé que le finally était géré. Ouh, c'est nul !
Please don't feed it
lol java c'est has been
Passer à jav... ok, je sors
J'utilise Oracle et PHP et apparemment les connexions sont bien fermées à la fin du script, même lors d'oubli du ocilogoff
Ben le garbage collector ne fait que passer derrière tout ce qui est ouvert et il le ferme, il me semble que les connexion oracle ou autres sont fermées également ... La couche d'abstraction (Propel ou autre) est faites en php et utilisent donc le même garbage collector ...
Je mettrai pas ma main a couper au feu ladsu mais j'ai bien l'impression que ça fonctionne comme ça
Je n'ai jamais fermé mes connexion BDD non plus
OK pour le garbage collector, mais qu'en est-il des connexions postgresql ou Oracle (en utilisant une couche d'abstraction) ? Ça marche aussi ?
Sinon ton idée est interessante, Pitilezard. Je vais creuser en ce sens
zut, PiTiLeZarD, j'allais le dire... PHP intègre un garbage collector très efficace depuis longtemps. Je sais, c'est mal, mais je n'ai jamais d'instruction "mysql_close" dans mon code (sauf quand il pleut des grenouilles, et c'est rare). Je sais, c'est mal.
toutes les connexions aux bases sont fermées automatiquement en php a chaque fin de script
Sinon tu englobe ton try catch dans un autre try catch (fonction classe, qu'importe ...) Si tu as suivis la logique applicative tu dois avoir un seul point d'entrée dans ton index.php qui gère un peu tout le reste, alors il te suffit de trycatcher ça et de fermer ici (et autres vérifs au cas ou quelque chose plante ...
C'est ce que je fais perso ... J'ai un try./catch global, une myriade de throw et quand je veux , un try catch local
Passer à Python ?