“!==”和“==!”之间的区别
昨天我在修改别人写的PHP代码的时候偶然发现了这个。 我很困惑,一个简单的比较( if ($var ==! " ") )没有按预期工作。 经过一些testing,我意识到谁写的代码使用==! 而不是!==作为比较运算符。 我从来没有见过==! 在任何语言,所以我想知道如何这个代码甚至可以工作,并做了一些testing: 
 <?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) 
 运算符似乎为布尔和整数variables,但不适用于string。 我找不到==! 在PHP文档或任何有关它的任何search引擎(尝试谷歌,必应,DuckDuckGo,但我怀疑他们试图解释它,而不是search文字string)。 有没有人看过这个,可以揭示这种行为? 
 不同的是没有操作符==!  。 
这个expression式:
 $a ==! $b 
基本上是这样的:
 $a == (!$b) 
 没有==! 运算符在PHP中 
 它只是一个组合==和!  。 目前只有相关的操作符是== 。 所以组合==! 将正常工作== ,检查Equality ,相信我, 
 $variable_a ==! $variable_b 
不是别的
 $variable_a == (!$variable_b) 
因此;
 "a" ==! " ": bool(false) "a" ==! "a": bool(false) //is same as "a" == (!"a") 
和
 true ==! false: bool(true) true ==! true: bool(false) 
 组合多个操作员字符可能不总是作为操作员工作。 例如,如果我们取=和!  ,只有在!=或!==的模式下才能作为运营商使用。 这些字符可以有很多组合,如!==== , !==! 等等。操作员组合应该是独特的格式 , 唯一的顺序 , 独特的组合 (所有的字符不会与所有其他字符结合),而且绝对没有任何空间 。 
检查下面的操作员列表;

 ==! 不是运营商,而是两个: 
  ==和! 
 ! 具有比==更高的优先级 
所以:
  "a" !== " ": bool(true) – > true,因为“a”实际上不等于“” 
 "a" ==! " ": bool(false)  "a" ==! " ": bool(false) – > false,因为“a”不等于!“” 
可以写在==和!之间的空格。
 ==! 不存在这样的。 这是一个有点神秘的符号== ! 
 由于空格在这些操作中并不重要,所以可以简单地写a --> b ,它的计算结果是a-- > b ,但看起来很奇怪。 
 所以,至于这个问题: "a" ==! " "  "a" ==! " "将被parsing为"a" == !" " 。 string否定被覆盖,意味着任何string,但是"0"和" "被铸造时是true 。 
 因此,expression式"a" == !" "将被传送: 
-  "a" == !" "
-  "a" == !false
-  "a" == true
 而且,由于string "a"与bool true不一样,所以这个expression式将整个expression式评估为false 。 
那么,故事的寓意是什么呢? 不要让自己被错过或错误的空间所困惑! 🙂
==! 不是运营商
 ==! 不是一个PHP比较运算符 – 它是一样的== !  (注意空间) 
即
 if ("a" !== " ") { // evaluates to true - "a" and " " are not equal } if ("a" == !" ") { // unreachable } else { // evaluates to false - "a" is not equal to true (!" " evaluates to true) }