if语句值位置

时间:2012-03-24 10:32:11

标签: php optimization

两个陈述之间有什么区别:

if (false === $variable) {
  //do something
}

if ($variable === false) {
  //do something
}

我个人使用第二种风格,但经常遇到我使用的框架中的代码,它们似乎总是使用第一种风格。

是否存在差异(我怀疑它与类型有关,或者这只是一种编码习惯(它必须根植于某些东西?)

如果没有,假设逻辑实际上是向后的,第一种风格背后的原因是什么。

6 个答案:

答案 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)。在这种情况下,您的第二个版本将导致难以调试的问题,而第一个版本会抛出错误
  • 要强制条件语句的两个部分之一首先评估(最右边)