【问题标题】:Identical operator strange behaviour相同的操作员奇怪的行为
【发布时间】:2014-10-31 11:22:35
【问题描述】:

谁能解释一下 php 中“相同”运算符的这种奇怪行为?

$any_integer_but_not_one = -1;

var_dump( !$any_integer_but_not_one === 1 ); // bool(false)
var_dump(  $any_integer_but_not_one !== 1 ); // bool(true)

$int_one = 1;

var_dump( !$int_one === 1 ); // bool(false)
var_dump(  $int_one !== 1 ); // bool(false)

我预计这些测试将始终返回相同的结果(true-true 或 false-false),但事实并非如此。

我以为!x === y 和x !== y 做同样的事情,那么有什么区别呢?这里我说仅用于 相同 运算符,而不是 相等 运算符。
(我发现的任何其他问题都是关于 equality 和 identity 之间的差异)

【问题讨论】:

  • 他们输出的不是一样的吗? False 最后两个 False
  • @Umair 是的,但请看前两个测试。
  • 我以为(! sth === sth ) 和( sth !== sth) 这两个运算符每次都会返回相同的东西。

标签: php operators comparison-operators


【解决方案1】:

因为——

!$any_integer_but_not_one 将返回 false。

当var_dump( !$any_integer_but_not_one === 1 ); 是var_dump( false === 1 );

所以它会返回false

【讨论】:

  • 我可能会开始了解问题出在哪里...这是关于操作员的优先级的问题,对吧?你的意思是! 的优先级高于===?
  • 我完全忘记了运营商的优先级,我以为!x === y和!(x === y)是一样的。我明白了!
  • 是我的错误..忘了===.. :)
  • 感谢您的回答!也许最好说! 的优先级高于===,所以首先计算!x,然后计算===。谢谢!
  • 不...它不是实际的优先级..! 总是会返回相反的结果。 !== 是不同的运算符。不要混合使用 !$a == 1 和 $a !== 1。
猜你喜欢
  • 1970-01-01
  • 2017-07-27
  • 2014-08-13
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多