我知道,例如,使用:
if (in_array('...'), array('.', '..', '...') === true)
在:
if (in_array('...'), array('.', '..', '...') == true)
可以提高性能并避免一些常见错误(例如1 == true),但是我想知道是否有理由对字符串使用严格的比较,例如:
if ('...' === '...')
似乎与以下内容完全相同:
if ('...' == '...')
如果有人能为这个话题带来一些启示,我很感激。
答案 0 :(得分:7)
如果您知道两个值都保证是字符串,那么==
和===
是相同的,因为两者之间的唯一区别是===
检查是否类型是相同的,而不仅仅是有效值。
但是,在某些情况下,您不确定某个值是否为字符串 - 例如,使用$ _GET和$ _POST变量之类的值。请考虑以下事项:
$_GET['foo'] == ""
如果将foo
作为空白字符串传入,则上述表达式将评估为true,但如果没有为foo
传入任何值,它也将评估为true 。相比之下,
$_GET['foo'] === ""
如果显式传入空字符串,将仅计算为true - 否则$_GET['foo']
的值可能等于空字符串,但类型不会,因为它实际上是一个空值索引,而不是字符串。
答案 1 :(得分:3)
当您可以使用其中一个选择严格比较时,因为:
比较字符串时,你仍然会有意想不到的结果,因为字符串可能是空的,或者你认为字符串实际上不是。
您永远不会使用两个字符串文字的比较,因为它总是可以减少为TRUE或FALSE。例如:
if ('...' === '...')
与
相同if (TRUE)
因此,由于您将始终比较至少一个变量,因此必须假设您可能会产生意外结果。
您可以在http://net-beta.net/ubench/查看各种严格与宽松比较的基准测试结果。我也运行了自己的测试,发现了相同的结果。
这是一个微优化,这意味着您不应该更改现有代码,因为它不会产生明显的差异,但如果您正在编写新代码,您也可以使用最有效的技术练习。 / p>