Gestern bin ich darüber gestolpert, als ich PHP-Code geändert habe, der von jemand anderem geschrieben wurde. Ich war verblüfft, dass ein einfacher Vergleich ( if ($var ==! " ")
) nicht wie erwartet funktionierte. Nach einigen Tests wurde mir klar, dass derjenige, der diesen Code schrieb, ihn ==!
nicht !==
als Vergleichsoperator verwendete. Ich habe noch nie ==!
in einer Sprache gesehen, also habe ich mich gefragt, wie zum Teufel dieser Code überhaupt funktionieren könnte, und einige Tests durchgeführt:
<?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");
?>
Dies erzeugt diese Ausgabe:
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)
Der Operator scheint für boolesche und ganzzahlige Variablen zu funktionieren, nicht jedoch für Zeichenfolgen. Ich kann ==!
in der PHP-Dokumentation oder in einer Suchmaschine nichts darüber finden (versucht Google, Bing, DuckDuckGo, aber ich vermute, sie versuchen, es zu interpretieren, anstatt nach der wörtlichen Zeichenfolge zu suchen). Hat das schon jemand gesehen und kann dieses Verhalten beleuchten?