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

Portrait de Blount

Il existe une autre

Il existe une autre raison.
Par exemple :

<?phpif ($truc = strpos($truc, 'machin') !== false) {

}?>

Ici, on assigne le résultat de "strpos($truc, 'machin') !== false". Donc soit "true" soit "false".

<?phpif (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 Moosh

pire

Portrait de Exotux

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

Portrait de elo

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.

Portrait de Maxence

Coder sans bogues, c'est

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

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be 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>, <php>.

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.