这些PHP if表达式有什么区别?

7
这些PHP if表达式有什么区别?
if ($var !== false)
{
    // Do something!
}


if (false !== $var)
{
    // Do something!
}

一些框架如Zend Framework使用最新的表单,而传统的则是第一个。
提前致谢。
6个回答

10

尽管表达式的结果相同,但这是一种很好的保护自己免于赋值而不是比较的方式(例如,写if ($var = false)而不是if ($var == false),因为你无法将变量$var赋值给关键字false


2

这只是个人偏好而已。你可以把它写成 a == b 或者 b == a 的形式,但是如果你选择后者,犯错误的可能性会更高。

if ($var == false)

因为如果你意外地只输入了一个等号,条件将始终等于true(因为$var将成功设置),但是在这种情况下,……
if (false == $var)

如果您现在输入 =,会出现错误。

吹毛求疵:“因为如果你不小心只输入一个等号,条件将始终等于true” - 这是不正确的。if ($var = false)$var = false; if ($var)相同。因此,它将始终计算为false。 - pinkgothic

1

这两个表达式在语义上是相同的。只是将常量表达式放在前面还是后面的问题。


0

没有实质性的区别。操作数只是在不同的一侧,但比较仍然是相同的。


0

没有区别。!==进行类型检查比较2个表达式,如果它们不相等则返回true。差异可能在于表达式的求值顺序,但在你写的情况下,没有区别(良好的程序不应该依赖这样的表达式的执行顺序)。


0

考虑以下情况:

if (strpos($string, $substring)) { /* found it! */ } 

如果$substring恰好位于$string的开头,则返回值为0。不幸的是,在if语句中,这会被评估为false,因此条件不会执行。
正确的处理方式应该是:
if (false !== strpos($string, $substring)) { /* found it! */ }

结论:

false 总是保证为假。其他值可能无法保证这一点。例如,在 PHP 3 中,empty('0')true,但后来变成了 false


我没有给你点踩,但是你没有回答问题。OP并不是在问if ($var) / if (func())if ($expectedValue === $var) / if ($expectedValue === func())之间的区别,而只是为什么在if语句条件中列出常量比变量更好的想法。 - pinkgothic

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