昨日、誰かが書いたPHPコードを変更したとき、私はこれにつまずきました。単純な比較(if ($var ==! " ")
)が期待どおりに機能しないことに困惑しました。いくつかのテストを行った後、そのコードを書いた人は誰でも比較演算子の==!
代わりに使用されていることに気付きました!==
。私は==!
どの言語でも見たことがなかったので、このコードが一体どのように機能するのか疑問に思い、いくつかのテストを行いました。
<?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");
?>
これにより、次の出力が生成されます。
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)
演算子はブール変数と整数変数に対しては機能するようですが、文字列に対しては機能しません。==!
PHPのドキュメントや、検索エンジンの何についても見つけることができません(Google、Bing、DuckDuckGoを試してみましたが、リテラル文字列を検索する代わりに解釈しようとしているのではないかと思います)。誰かがこれを以前に見たことがあり、この行動に光を当てることができますか?