=== 在 PHP 中做了啥
Posted
技术标签:
【中文标题】=== 在 PHP 中做了啥【英文标题】:What does === do in PHP=== 在 PHP 中做了什么 【发布时间】:2010-10-26 07:32:15 【问题描述】:我已经用 php 编程了一段时间,但我仍然不明白 == 和 === 之间的区别。我知道 = 是赋值。 == 等于。那么===的目的是什么?
【问题讨论】:
【参考方案1】:它比较值和类型是否相等。
if("45" === 45) //false
if(45 === 45) //true
if(0 === false)//false
它有一个类比:!== 比较类型和值的不等式
if("45" !== 45) //true
if(45 !== 45) //false
if(0 !== false)//true
它对于 strpos 之类的函数特别有用——它可以有效地返回 0。
strpos("hello world", "hello") //0 is the position of "hello"
//now you try and test if "hello" is in the string...
if(strpos("hello world", "hello"))
//evaluates to false, even though hello is in the string
if(strpos("hello world", "hello") !== false)
//correctly evaluates to true: 0 is not value- and type-equal to false
Here's a good wikipedia table 列出与三等号类似的其他语言。
【讨论】:
在strpos的情况下,“false”/“true” cmets不是很清楚,但我想你可以在上下文中很好地理解它。 另外,由于 Tom 指出的结果,在评估返回值时使用 === 或 !== 几乎总是更好。即使该函数目前没有返回一个模棱两可的值,将来也可能会改变。 我认为答案很好,但是您在示例中使用的最后一行给了我威利。在现实世界的情况下,不能/不应该像 if(strpos("hello world", "hello") >= 0) 吗? (或类似的东西......我假设 strpos 要么像其他语言一样返回-1,要么可以以某种方式被捕获。)当然,这会破坏你回答的重点,所以我理解它为什么在那里,但是我想知道人们何时会真正使用这种 === 或 !== 类型功能。 Beska,strpos 返回一个布尔值 false,而不是 -1。 (这间接回答了你下一个问题,当人们实际使用它时)【参考方案2】:=== 确实可以同时比较值和类型,但还有一种情况尚未提及,那就是当您使用 == 和 === 比较对象时。
给定以下代码:
class TestClass
public $value;
public function __construct($value)
$this->value = $value;
$a = new TestClass("a");
$b = new TestClass("a");
var_dump($a == $b); // true
var_dump($a === $b); // false
如果对象 === 比较的是引用,而不是类型和值(因为 $a 和 $b 的类型和值都相同)。
【讨论】:
【参考方案3】:PHP 手册中有 a couple of very nice tables(“使用 == 进行松散比较和使用 === 进行严格比较)显示在比较各种变量类型时 == 和 === 会给出什么结果。
【讨论】:
【参考方案4】:它会检查数据类型和值是否相同
if ("21" == 21) // true
if ("21" === 21) // false
【讨论】:
【参考方案5】:===
比较值和类型。
【讨论】:
【参考方案6】:== 不比较类型,=== 可以。
0 == false
计算结果为真,但是
0 === false
没有
【讨论】:
【参考方案7】:这是一个真正的平等比较。
"" == False
例如是true
。
"" === False
是false
【讨论】:
【参考方案8】:至少,=== 比 == 快,因为没有自动强制转换/强制执行,但它太小了,几乎不值得一提。 (当然,我刚才提到了……)
【讨论】:
以上是关于=== 在 PHP 中做了啥的主要内容,如果未能解决你的问题,请参考以下文章
elementFormDefault 在 XSD 中做了啥?