Lorsque je parcoure le code du Zend Framework, je vois souvent des conditions écrites sous cette forme :
<?php
if (0 == $argc) {
// ...
}
?>
Jusqu'ici, je trouvais ça un peu bizarre, j'ai plutôt tendance à mettre la variable en premier et la valeur littérale en second. J'aurai donc écrit :
<?php
if ($argc == 0) {
// ...
}
?>
Mais je viens de comprendre pourquoi en lisant cet excellent article de Kean WALMSLEY. En fait, ça permet de détecter une éventuelle erreur de frappe. En effet, si on oublie un signe égal, on réalise une assignation au lieu d'un test. En inversant l'ordre des opérandes, cela provoque une erreur lors de l'analyse du code effectuée par l'interpréteur PHP :
<?php
// Ce code provoque une erreur, car on essaie d'assigner une valeur à un littéral.
if (0 = $argc) {
// ...
}
?>
L'intérêt de cette astuce est limitée, car elle ne fonctionne que pour les test d'égalité et que les IDE affichent généralement des avertissements quand ils détectent une assignation dans une condition. Mais bon, c'est ce genre de truc qui peut vous faire passer pour un vieux routier du code ;-)
Commentaires
Blount (non vérifié)
lun, 08/02/2010 - 09:50
Permalink
Il existe une autre
Il existe une autre raison.
Par exemple :
if ($truc = strpos($truc, 'machin') !== false) {
}
Ici, on assigne le résultat de "strpos($truc, 'machin') !== false". Donc soit "true" soit "false".
if (false !== $truc = strpos($truc, 'machin')) {
}
Ici on stocke le résultat de "strpos($truc, 'machin')" dans $truc, qui est ensuite comparé à "false".
Bien entendu, c'est lié au fait que $truc ne peut être assigné à false (ou autre valeur constante). On aurait aussi pu mettre des parenthèses pour forcer la priorité.
Moosh (non vérifié)
lun, 08/02/2010 - 13:35
Permalink
pire
pire encore
http://moosh.et.son.brol.be/blog/index.php/2007/02/02/446-x-a-b-c-et-a-x...
Exotux (non vérifié)
mar, 09/02/2010 - 00:33
Permalink
J'ai vu cette astuce dans le
J'ai vu cette astuce dans le livre Ajax, bonnes pratiques Web 2.0 de C. Porteneuve. C'est très utilisé en Javascript visiblement. Mais j'ai plutôt du mal à m'y faire :)
elo (non vérifié)
mer, 16/06/2010 - 00:31
Permalink
Je suis dev JS, je ne code
Je suis dev JS, je ne code jamais comme ça car c'est assez illogique.
Il vaut mieux coder sans bug qu'émettre la possibilité de se tromper à chaque condition.
Maxence
lun, 21/06/2010 - 19:41
Permalink
Coder sans bogues, c'est
Coder sans bogues, c'est comme vivre sans respirer.
Ajouter un commentaire