应该在字符串中使用严格的比较吗?

时间:2009-08-15 11:10:00

标签: php string comparison string-comparison strict

我知道,例如,使用:

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

在:

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

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

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

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

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

如果有人能为这个话题带来一些启示,我很感激。

2 个答案:

答案 0 :(得分:7)

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

但是,在某些情况下,您不确定某个值是否为字符串 - 例如,使用$ _GET和$ _POST变量之类的值。请考虑以下事项:

$_GET['foo'] == ""

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

$_GET['foo'] === ""
如果显式传入空字符串,

将仅计算为true - 否则$_GET['foo']的值可能等于空字符串,但类型不会,因为它实际上是一个空值索引,而不是字符串。

答案 1 :(得分:3)

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

  1. 性能更佳
  2. 它可以防止意外结果
  3. 比较字符串时,你仍然会有意想不到的结果,因为字符串可能是空的,或者你认为字符串实际上不是。

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

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

    相同
    if (TRUE)
    

    因此,由于您将始终比较至少一个变量,因此必须假设您可能会产生意外结果。

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

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