05-09-2009, 05:25 PM
Voici un article d'alsacréations qui peut apporter un peu d'eau au moulin :
Gérer les erreurs MySQL en php sans or die. La qualité de cet article est bien en-deça de ce qu'on y lit habituellement, mais ça peut servir.
Personnellement, j'utilise une sous-classe PDO programmée par mes soins, et donc les exceptions. J'ai même converti les warnings et notices standard en exceptions.
Par contre, paradoxalement, il n'y a pas énormément de try...catch partout dans mon code. Le traitement est centralisé dans une fonction que php se charge d'appeler lui-même quand il rencontre une exception non catchée (cf. set_exception_handler). Une facilité du langage bien pratique, il faut bien l'avouer.
Ce qui me fait venir à un argument supplémentaire à l'encontre de or die que personne n'a encore mentionné.
Rajouter ce fameux or die après à la fin de la ligne, non seulement c'est barbant à écrire ou à coller et recoller, mais en plus c'est vite oublié quand on est pris dans le feu du coding et qu'on a bien en tête ce qu'on a à faire.
Que se passe-t-il s'il y a une erreur à un endroit du script où on a oublié notre or die ? inutile de faire de dessin je pense, vous en avez déjà tous fait l'expérience au moins une fois : c'est la catastrophe, tout se barre en couille. ON peut appeler ça... une erreur dans la gestion des erreurs.
Oui vous me direz, on peu aussi oublier les try...catch. En effet. Le compilateur n'est pas là pour le rappeler, comme c'est le cas par exemple en java (bon par contre en java, devoir catcher toutes les SQLException, pour le coup, c'est vraiment lourd).
Vu que tout est centralisé, je n'ai plus besoin d'écrire à chaque fois un code de gestion d'erreur qui gêne la lisibilité, qui est barbant à écrire et qui peut potentiellement être oublié. Le seul moment où j'ai besoin d'en écrire un, c'est pour un cas spécifique, mais là évidemment on n'y coupe pas quelque soit la méthode (exception ou non), et là généralement un simple if si naturel suffit (un if du genre la requête a-t-elle retourné un enregistrement ?)
Le fait de centraliser toutes les erreurs dans une fonction ne gêne pas du tout qu'on peut faire tout ce qu'on veut spécifiquement selon le cas. C'est une erreur SQL ? On balance une page d'erreur 500. Je suis admin ? On affiche la requête. Je ne suis pad admin ? On log la requête quelque part et on affiche un message générique du genre désolé pour le désagrément.
Voilà.
Gérer les erreurs MySQL en php sans or die. La qualité de cet article est bien en-deça de ce qu'on y lit habituellement, mais ça peut servir.
Personnellement, j'utilise une sous-classe PDO programmée par mes soins, et donc les exceptions. J'ai même converti les warnings et notices standard en exceptions.
Par contre, paradoxalement, il n'y a pas énormément de try...catch partout dans mon code. Le traitement est centralisé dans une fonction que php se charge d'appeler lui-même quand il rencontre une exception non catchée (cf. set_exception_handler). Une facilité du langage bien pratique, il faut bien l'avouer.
Ce qui me fait venir à un argument supplémentaire à l'encontre de or die que personne n'a encore mentionné.
Rajouter ce fameux or die après à la fin de la ligne, non seulement c'est barbant à écrire ou à coller et recoller, mais en plus c'est vite oublié quand on est pris dans le feu du coding et qu'on a bien en tête ce qu'on a à faire.
Que se passe-t-il s'il y a une erreur à un endroit du script où on a oublié notre or die ? inutile de faire de dessin je pense, vous en avez déjà tous fait l'expérience au moins une fois : c'est la catastrophe, tout se barre en couille. ON peut appeler ça... une erreur dans la gestion des erreurs.
Oui vous me direz, on peu aussi oublier les try...catch. En effet. Le compilateur n'est pas là pour le rappeler, comme c'est le cas par exemple en java (bon par contre en java, devoir catcher toutes les SQLException, pour le coup, c'est vraiment lourd).
Vu que tout est centralisé, je n'ai plus besoin d'écrire à chaque fois un code de gestion d'erreur qui gêne la lisibilité, qui est barbant à écrire et qui peut potentiellement être oublié. Le seul moment où j'ai besoin d'en écrire un, c'est pour un cas spécifique, mais là évidemment on n'y coupe pas quelque soit la méthode (exception ou non), et là généralement un simple if si naturel suffit (un if du genre la requête a-t-elle retourné un enregistrement ?)
Le fait de centraliser toutes les erreurs dans une fonction ne gêne pas du tout qu'on peut faire tout ce qu'on veut spécifiquement selon le cas. C'est une erreur SQL ? On balance une page d'erreur 500. Je suis admin ? On affiche la requête. Je ne suis pad admin ? On log la requête quelque part et on affiche un message générique du genre désolé pour le désagrément.
Voilà.
html, javascript, blagues, midi, etc. => http://quentinc.net/