par
Ryle » 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

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 [php]if ($lettrecour != $lettreprec)
// => Si $lettrecour est différent de $lettreprec[/php]est équivalente à [php]if ( ! ($lettrecour == $lettreprec) )
//=> Si l'expression ($lettrecour est égale à $lettreprec) est fausse[/php]
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 [php]if (!$lettrecour == $lettreprec)[/php]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 :)