昨天我在修改别人编写的 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,但我怀疑他们试图解释它,而不是搜索字符串)。以前有人见过这种情况吗? 能解释一下这种行为吗?