!== 和 === 在 PHP 中是啥意思? [复制]

Posted

技术标签:

【中文标题】!== 和 === 在 PHP 中是啥意思? [复制]【英文标题】:What do !== and === mean in PHP? [duplicate]!== 和 === 在 PHP 中是什么意思? [复制] 【发布时间】:2011-05-04 02:01:03 【问题描述】:

可能的重复:How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?Reference - What does this symbol mean in php?php not equal to != and !==

这段代码 sn-p 中的 !===== 运算符是什么?

if ( $a !== null ) // do something
if ( $b === $a ) // do something

【问题讨论】:

php.net/manual/en/language.operators.comparison.php 很遗憾,SO 搜索引擎不适用于“===”,因为这个问题大约每月被问一次。 最佳答案之一作为评论 xD 提供 @Paul 对于=== 有this,对于!== 有this。这是两者的副本;我投票关闭作为第一个的副本,希望其他人投票支持第二个,所以他们都出现在列表中(谁投票关闭作为 NaRQ 只是懒惰) @Paul Tomblin:你一定很少来这里;) 【参考方案1】:

=== 还会检查变量的类型。

例如,"1" == 1 返回 true,但 "1" === 1 返回 false。它对于可能返回 0 或 False(例如 strpos)的函数特别有用。

这不能正常工作,因为 strpos 返回 0 和 0 == false

if (strpos('hello', 'hello world!'))

但是,这会起作用:

if (strpos('hello', 'hello world!') !== false)

【讨论】:

这个答案是正确的,但我要添加一个例子。 strpos("abcde", "f") 返回false,因为f 不在字符串abcde 中。您可能想对此进行测试,因此您将使用if (strpos("abcde", "f")===false)。如果您只是简单地执行了if(!(strpos("abcde", "f"))),那么如果 strpos 实际上返回了0,您将遇到麻烦。为什么?因为 PHP 是松散类型的,00 和 false 在不比较类型时也是等价的。【参考方案2】:

它们是identity等价运算符。

1 == 1
1 == "1"
1 === 1
1 !== "1"
true === true
true !== "true"
true == "true"

所有这些都等同于真实。 另请查看@mbeckish 提供的this link

【讨论】:

我不会称它为身份,因为具有不同身份的两个对象仍然可以具有相同的值和相同的类型(并且=== 相同)。 php中没有identity 是等价运算符。它断言两个“参数”(左侧和右侧)都相等且类型相同(如果是对象,则为同一类)。【参考方案3】:

它们是严格的类型比较运算符。他们不仅检查,还检查类型

考虑比较数字或字符串时的情况:

if (4 === 4) // same value and type

  // true

但是

if (4 == "4") // same value and different type but == used

  // true

if (4 === "4") // same value but different type

  // false

这适用于对象和数组。

所以在上述情况下,你必须做出明智的选择是使用==还是===

当您确定类型时,最好使用===

更多信息:

http://php.net/manual/en/types.comparisons.php

【讨论】:

【参考方案4】:

双 = 符号是一种比较,用于测试左侧的变量/表达式/常量是否与右侧的变量/表达式/常量具有相同的值。

三重 = 符号用于比较两个变量/表达式/常量是否相等且具有相同的类型 - 即两者都是字符串或都是整数。

同样的概念也适用于 !==

【讨论】:

【参考方案5】:

只有当给定值的类型和值都相等时,它们才会返回 true。 例子: 1 === 1 为真 “1” === 1 为假 1 === "1" 为假 "1" === "1" 为真

与 == 以上所有情况一样

【讨论】:

【参考方案6】:

当您使用两个等号 == 时,它将检查相同的值。

if( '1' == 1 )  echo 'yes'; 

上面的代码有效,因为它们具有相同的值。

但如果你使用三个等号===,它会检查值和数据类型。

因此

if( '1' === 1 )  /* this will not work */ 

这是因为'1' 的数据类型为string,而1integernumber

但你可以做这样的事情 - 我认为 :D

if( (integer) '1' === 1 )  echo 'this works'; 

因为我们正在将'1' 的数据类型更改为integer

【讨论】:

以上是关于!== 和 === 在 PHP 中是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

参考 - 这个错误在 PHP 中是啥意思?

参考 - 这个错误在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?