Ecrire une condition en PHP

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

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 :

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 :

// 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 ;-)

Portrait de Anonyme

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

Portrait de Anonyme

pire

Portrait de Anonyme

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

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account, used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].

Plus d'informations sur les options de formatage

CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.