Modérateur PHPfrance |
10684 Messages
21 mars 2009, 13:36
Dans le cas présent, ce n'est pas qu'une question de préférence. Le résultat ne sera pas le même du fait de la priorité de l'opérateur "!" par rapport à l'opérateur "==".
La syntaxe
if ($lettrecour != $lettreprec)
// => Si $lettrecour est différent de $lettreprec
est équivalente à
if ( ! ($lettrecour == $lettreprec) )
//=> Si l'expression ($lettrecour est égale à $lettreprec) est fausse
Dans ce cas là, c'est effectivement une question de préférence, et c'est quand même préférable pour la compréhension et la lisibilité d'avoir une affirmation que 2 négations
En revanche l'instruction
if (!$lettrecour == $lettreprec)
est très différente. En effet, sans les parenthèses de l'exemple précédent, l'opérateur "!" s'applique en priorité, avant la comparaison et peut s'exprimer ainsi :
=> Si le contraire de $lettrecour est égal à $lettreprec.
PHP va dans ce cas interpréter la varibale $lettrecour comme étant un booléen (quel que soit son contenu) et en déterminer le contraire (si le contenu est 0, false, vide etc. le contraire sera TRUE, sinon le contraire sera FALSE). Et c'est seulement ensuite qu'il va comparer la valeur TRUE/FALSE à celle contenue par $lettreprec, causant un résultat très différent de ce que tu aurais pu attendre

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...