Ecrire une condition en PHP

Lorsque je parcoure le code du Zend Framework, je vois souvent des conditions écrites sous cette forme :

<?php
if (== $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 ($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 ;-)

Etiquettes:

Commentaires

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é.

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 :)

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.

Coder sans bogues, c'est comme vivre sans respirer.

Ajouter un commentaire