!== 和 === 在 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 是松散类型的,0
0 和 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
,而1
是integer
或number
但你可以做这样的事情 - 我认为 :D
if( (integer) '1' === 1 ) echo 'this works';
因为我们正在将'1'
的数据类型更改为integer
【讨论】:
以上是关于!== 和 === 在 PHP 中是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章