Php “之间的区别==&引用;和“==”&引用;

Php “之间的区别==&引用;和“==”&引用;,php,comparison,operators,comparison-operators,Php,Comparison,Operators,Comparison Operators,昨天,当我修改别人编写的PHP代码时,我无意中发现了这一点。一个简单的比较(if($var==!“”))并没有像预期的那样起作用,这让我感到困惑。经过一些测试,我意识到无论是谁编写的代码都使用了==而不是==作为比较运算符。我从来没见过==以任何语言编写,因此我想知道这段代码到底是如何工作的,并进行了一些测试: <?php echo "int\n"; echo "1 !== 0: "; var_dump(1 !== 0); echo "1 !== 1: "; var_dump(1 !==

昨天,当我修改别人编写的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");
?>

该运算符似乎适用于布尔和整数变量,但不适用于字符串。我找不到
==或任何搜索引擎上的相关内容(尝试过Google、Bing、DuckDuckGo,但我怀疑他们试图解释它,而不是搜索文本字符串)。以前有没有人见过这种情况,并能对这种行为有所了解?

==不是运算符,而是两个运算符:

==

的优先级高于
=

因此:

“a”!=“”:bool(true)
-->true,因为“a”实际上不等于“”

“a”==!“”:bool(false)
-->false,因为“a”不等于!“”

可以使用介于==和!之间的空格写入

==!他不是接线员
==
根本不是php比较运算符-它与
==相同(注意空格)


区别在于没有运算符
=

这句话:

$a ==! $b
与此基本相同:

$a == (!$b)

==本身不存在。这是一个有点神秘的
==

由于空格在这些操作中并不重要,因此您可以同样轻松地编写
a-->b
,其计算结果为
a-->b
,但看起来会很奇怪

所以,关于这个问题:
“a”==!“
将被解析为
”a”==!“”
。字符串的否定包含在中,表示除
“0”
之外的任何字符串,
在强制转换时为
true

因此,表达式
“a”==!“
将被传输:

  • “a”==!“”
  • “a”==!错误
  • “a”==true
  • 而且,由于
    字符串“a”
    bool-true
    不同,这会将整个表达式计算为
    false

    那么,这个故事的寓意是什么?不要让自己被遗漏或错误放置的空格弄糊涂了!:)

    没有<代码>==运算符 它只是
    ==
    的组合。此处唯一相关的操作员是
    ==
    。所以组合
    ==
    将像普通的
    ==
    一样工作,检查
    是否相等,相信我

    $variable_a ==! $variable_b 
    
    正是

    $variable_a == (!$variable_b)
    
    因此

    "a" ==! " ": bool(false)
    "a" ==! "a": bool(false) //is same as "a" == (!"a")
    

    组合多个运算符字符可能无法始终作为运算符使用。例如,如果我们取
    =
    ,仅当它处于
    模式时,它将作为运算符工作=
    ==。这些字符可以有多种组合,如
    ====
    !==等。。等运算符组合应为唯一格式唯一顺序唯一组合(所有字符不会与所有其他字符组合),并且明确地说,它们之间没有任何空格

    检查下面的操作员列表


    哇,这么短的时间内有很多好答案。我选择了第一个答案,澄清了这个问题!应用于右侧变量,因此具有最大值。为其他人感到抱歉;)@Gerald Schneider:至少你能做的就是弥补这个问题,至少在语法和格式化方面与其他答案相符合(其中一个是你特别呼吁的,非常详细的解释)。但不管怎样,我现在已经编辑过了。我甚至都不使用PHP编程,甚至我意识到“==!”将被理解为两个运算符“==”和“!”。它只是展示了一点布局对阅读的影响。@Bang-Dao-Um,JavaScript?它有===和!==。但是没有@帮道现在你找到了另一个原因,请阅读,这很重要。来吧。。。投票是怎么回事?我可以再提出十几个这样的问题。并伴随着准严肃分析。这是标准的教科书练习,不。在SO中,我们投票是为了质量和信息,而不是为了娱乐和娱乐。@sehe He获得了越来越多的选票,因为这是一个经过充分研究的问题的定义-他“深思熟虑地寻找答案”,“非常具体”,这个问题“与他人相关”,并且是“关于主题”。OP尝试了很多东西,向我们展示了他的尝试;这就是这个网站试图解决的问题foster@JRaymond当前位置他获得了越来越多的选票,因为这是一个很容易理解的问题和答案的琐碎问题。琐事方面增加了好奇心,促使更多的人加入,简单方面增加了理解问题和答案足以投票的人的百分比。“这与它是否是一个好问题无关。”杰雷蒙德,承认吧,大多数高投票率的问题都是琐事。看看我的这三个问题,以及其他许多问题:。这些问题都不是你能在谷歌上找到的(不像大多数高投票率的问题),它们在被写之前都经过了深思熟虑和尝试(我知道,因为我写了它们)。然而,由于这些问题需要专业知识,因此他们永远不会获得高选票。这就是这里的系统工作原理。@JRaymond sehe是对的。在这样的情况下,作家们会有一个愉快的日子。我建议你看一下这个列表()并提出一些有趣的问题,函数就是解决方案。情况或函数越模糊和有趣,投票数就越多。与此答案中所述不同,“a”==true的计算结果为true,因为a不是
    "a" ==! " ": bool(false)
    "a" ==! "a": bool(false) //is same as "a" == (!"a")
    
    true ==! false: bool(true)
    true ==! true: bool(false)