何时在PHP中使用===,!==而不是==,!=

3
可能有重复问题:php == vs === operator 我理解在PHP中===!====!=的区别,但我总是更喜欢使用===!==,但我没有真正的理由。在PHP.net的文档中,经常会出现警告,建议您使用===来检查一些内置函数的返回值。那么我的问题是为什么我应该使用一个运算符集而不是另一个?
非常感谢 :).

在适当的时候使用它们。如果您理解了差异,问题是什么?我已经用完了所有的关闭投票,但这是一个非常不建设性的问题。 - kapa
还有其他更适合这种问题的网站吗?比如说程序员堆栈交换? - ale
2
我对 programmers.SE 的常见问题解答不是很熟悉。我的问题在于你的问题“可能会引起意见、辩论、争论、投票或长时间讨论”。没有个人攻击的意思。===== 都有它们的用处,所以你不能一般地说“使用其中一个胜过另一个”。 - kapa
我理解了,我已经投票关闭了。 - ale
4个回答

5
自动类型转换可能会导致意外的假阳性和假阴性,如果它没有按照您(或未来维护代码的开发人员)预期的方式进行转换,那么这种情况就会发生。而且,类型转换的规则通常很复杂,并且在不同的编程语言中存在差异,因此这种混淆的空间非常大。
除非您需要进行类型转换,否则请始终使用三个字符版本。

3

===!==仅在您关心两个操作数是否为相同类型的情况下使用。

否则,请使用==!=——因为隐式转换是我们热爱php的原因。


4
@ThiefMaster说:我喜欢它,因为否则编程将成为一个不断的转换地狱,因为PHP从所有的第三方数据源中获取数据都是字符串类型的。PS:我总是知道变量的类型,所以可能的隐式转换根本不是问题。 - zerkms
2
@ThiefMaster:这并不可怕,你有点过度夸张了 :-) PS:我更喜欢使用 if ($string) 而不是 if (strlen($string) > 0),因为对我来说它更有意义。你会选择哪个? - zerkms
2
这类问题总是会导致相同的对话 :)。 - kapa
1
@baž 确实如此。如果您正在使用动态类型语言,请了解其规则并利用它们(减少代码)。否则,请使用强类型语言。 :o) - deceze
1
@deceze:嘿,去另一个聊天室找漏洞吧——我们正在讨论类型!;-) - zerkms
显示剩余3条评论

3

最常见的原因是一个函数返回数字/字符串,可能会在出错时返回false。如果0是有效结果,而false表示错误,那么您必须使用===来区分它们。然而,总是使用===可能会导致意外的行为,例如返回null并被认为是非有效值,但类型检查仅适用于false。因此,如果数据来自您自己的源代码/PHP函数,并且您知道无效值确切地只有一个,请使用严格检查。在大多数情况下,==是一个安全的选择,特别是当处理来自您无法控制的外部数据时。


1

===!==在使用可能返回0作为成功和FALSE作为失败的函数时非常重要。在PHP中,0也等于FALSE,这会导致函数失败的结论。

if(somefunction() == 0) {
    // Do something
}

假设某个函数在成功退出时返回0,失败时返回FALSE,当返回代码为FALSE时,上面的片段将被触发。
使用“===”可以避免这种情况,因为它只会在响应确实为0时触发。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接