3

我知道,例如,使用:

if (in_array('...'), array('.', '..', '...') === true)

超过:

if (in_array('...'), array('.', '..', '...') == true)

可以提高性能并避免一些常见错误(例如 1 == true),但是我想知道是否有理由对字符串使用严格比较,例如:

if ('...' === '...')

似乎与以下内容完全相同:

if ('...' == '...')

如果有人可以为这个主题带来一些启发,我将不胜感激。

4

2 回答 2

8

如果您知道这两个值都保证是字符串,那么=====是相同的,因为两者之间的唯一区别是===检查类型是否相同,而不仅仅是有效值。

但是,在某些情况下,您不确定一个值是否会是一个字符串 - 例如,对于像 $_GET 和 $_POST 变量这样的东西。考虑以下:

$_GET['foo'] == ""

如果作为空白字符串传入,上面的表达式将评估为 true ,但如果根本没有传入任何值foo,它也会评估为 true 。相比之下,foo

$_GET['foo'] === ""

仅当显式传入空白字符串时才会评估为 true - 否则值$_GET['foo']可能等同于空白字符串,但类型不会是,因为它实际上是该索引的空值,而不是字符串。

于 2009-08-15T11:16:51.143 回答
3

当您可以使用其中一种时,请选择严格比较,因为:

  1. 它有更好的性能
  2. 它可以防止意外结果

比较字符串时,您仍然会得到意外结果,因为字符串可能为空,或者您认为是字符串的变量实际上不是。

您永远不会使用两个字符串文字的比较,因为它总是可以简化为 TRUE 或 FALSE。例如:

if ('...' === '...')

是相同的

if (TRUE)

因此,由于您将始终比较至少一个变量,因此您必须假设您可能会得到意想不到的结果。

您可以在http://net-beta.net/ubench/查看各种严格与松散比较的基准测试结果。我也进行了自己的测试并发现了相同的结果。

这是一个微优化,这意味着您不应该更改现有代码,因为它不会产生明显的差异,但如果您正在编写新代码,您不妨练习使用最有效的技术。

于 2012-12-05T00:37:15.650 回答