两个陈述之间有什么区别:
if (false === $variable) {
//do something
}
和
if ($variable === false) {
//do something
}
我个人使用第二种风格,但经常遇到我使用的框架中的代码,它们似乎总是使用第一种风格。
是否存在差异(我怀疑它与类型有关,或者这只是一种编码习惯(它必须根植于某些东西?)
如果没有,假设逻辑实际上是向后的,第一种风格背后的原因是什么。
答案 0 :(得分:0)
如果您在左侧放置了无法分配给它的值(文字,常量,函数调用等),那么,如果您不小心使用了赋值运算符(=
)而不是比较运算符,那么你将得到一个错误而不是一个难以追踪的错误。
即
if (false = $variable) { // Error
if ($variable = false) { // Valid code that doesn't do what you want
答案 1 :(得分:0)
这可以追溯到C编程。如果您意外地使用=(赋值)而不是==或===(等于),这是确保“编译器”失败的一种方法,因为“false”不是左值(不能在赋值的左侧) )
答案 2 :(得分:0)
源于此:
if (false = $variable)
语法错误
if ($variable = false)
意外转让
答案 3 :(得分:0)
if ($foo = false)
(注意:=
而不是==
)是典型的拼写错误导致难以调试的问题。出于这个原因,有些人更喜欢false == $foo
,因为当您尝试将某些内容分配给false
时,运行时会抛出错误。
除此之外没有区别。
答案 4 :(得分:0)
已经有一段时间了。它来自于意外写作(忘记一个=
):
if (c = 1) {
}
执行赋值,它实际上并不检查c
是否等于1
。它指定1
然后计算结果为1(因此if语句因错误而变为true)。通过写作
if (1 == c) {
}
作为一种习惯,你不能犯那个错误。如果您在这种情况下忘记=
,编译器会发出警告,因为无法分配文字1
。
答案 5 :(得分:0)
实际上,这两个陈述是等价的。
所以, 为什么要用这种方式或其他方式(?) 编写:
if ($condition = false)
而不是if ($condition == false)
。在这种情况下,您的第二个版本将导致难以调试的问题,而第一个版本会抛出错误