Hier, je suis tombé sur cela lorsque j'ai modifié le code PHP écrit par quelqu'un d'autre. J'ai été déconcerté qu'une simple comparaison ( if ($var ==! " ")
) ne fonctionne pas comme prévu. Après quelques tests, je me suis rendu compte que celui qui écrivait ce code l'utilisait à la ==!
place !==
comme opérateur de comparaison. Je n'ai jamais vu ==!
dans aucune langue, alors je me suis demandé comment diable ce code pouvait même fonctionner et j'ai fait quelques tests:
<?php
echo "int\n";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "bool\n";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "string\n";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>
Cela produit cette sortie:
int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)
L'opérateur semble fonctionner pour les variables booléennes et entières, mais pas pour les chaînes. Je ne peux pas trouver ==!
dans la documentation PHP ou quoi que ce soit à ce sujet sur aucun moteur de recherche (essayé Google, Bing, DuckDuckGo, mais je soupçonne qu'ils essaient de l'interpréter au lieu de rechercher la chaîne littérale). Quelqu'un a-t-il déjà vu cela et peut-il faire la lumière sur ce comportement?