=== 在 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

"" === Falsefalse

【讨论】:

【参考方案8】:

至少,=== 比 == 快,因为没有自动强制转换/强制执行,但它太小了,几乎不值得一提。 (当然,我刚才提到了……)

【讨论】:

以上是关于=== 在 PHP 中做了啥的主要内容,如果未能解决你的问题,请参考以下文章

BuildContext 在 Flutter 中做了啥?

retranslateUi 在 PyQT 中做了啥

elementFormDefault 在 XSD 中做了啥?

InputStream.available() 在 Java 中做了啥?

“()”在等级声明中做了啥

`someObject.new` 在 Java 中做了啥?