Non je ne parlais pas des exceptions justement.
fopen("http://abcdef",'r');
Par exemple, ce cas là. En admettant que l'on prévoit son échec :
if (!fopen(...))
Php émet quand même une erreur (pas exception), alors que tu prévois l'échec. Il faudra donc, soit ignorer l'erreur (mais alors comment la distinguer d'une erreur non prévisible vraiment), soit :
if (@!fopen())
Ce que je ne trouve pas particulièrement séduisant non plus. Alors que si fopen() émettait une exception :
Cas 1 : je ne prévois pas du tout que cette fonction échoue
fopen(...)
=> Paf, exception rattrapée par plus haut, affichage message de désolation à l'utilisateur, enregistrement dans les logs.
Cas 2 : je prévois que cette fonction, travaillant à distance, est susceptible d'échouer, et je veux le gérer
1 2 3 4 5 6 7 8 9 10 11 12
| try {
fopen(...)
fputs
fclose
} catch (PhpErrorException $e)
{
// Ici, ça me sert pas à grand chose mais bon ;)
} |
En plus, un fopen() emet un WARNING pas un FATAL, ce qui fait que derrière il serait tout à fait possible de dire au client "on a bien enregistré votre information", puis quand il rappelle 'désolé, en fait non'.
Mon message n'empêche bien sûr pas de vérifier la présence du domaine avant, bien que selon certains cas, cela peut économiser des lignes :
1 2 3 4 5 6 7 8 9
| try {
fopen('http://www.gougueule.fr','r');
fread...
} catch (...)
{
echo "Domaine n'existe pas, veuillez rectifier";
} |
Par contre en faisant ça, et en sachant que PHP n'émet pas d'exception, il sera difficile d'analyser la raison réelle de l'échec, sauf éventuellement en enregistrant dans l'exception le type d'erreur émis, voire le message.
Bref, les exceptions permettent un développement strict (comme le typage fort), et même des oublis de déclaration de variable, qui peuvent entrainer des débogages douloureux, amènent à un échec certain.
Cela étant, c'est un autre sujet ^^
Partager