可能重复:
PHP - reversed order in if statement
Checking for null - what order?
检查Zend Framework发现他们以相反的方式执行所有变量检查:
public function setBootstrap($path, $class = null) {
if (null === $class) { // instead of if($class === null)
$class = 'Bootstrap';
}
这样做的原因是什么?
这是否也适合Java和C ++编程?
答案 0 :(得分:7)
有些人认为这有助于他们避免编写单=
(作业而不是相等的比较)
我相信这样做的好处远远小于可读性的损失(因此可维护性!)
不测试代码的人可能会依赖这种技巧。并回答你的问题,是的,它适用于从C语言中获取语法的大多数语言 - 我的意思是合适的,不推荐使用。
答案 1 :(得分:5)
此样式称为 yoda条件。
基本上它与通常的($variable === value
)样式具有相同的行为,但有一个优点:
如果您错误地编写=
而不是==
或===
,编译器会抛出错误。
由于您无法重新分配常量(在示例中为null
值),开发人员会立即识别由于编译器错误/警告而导致的错误,因此无需进行耗时的错误搜索。
所以下面的行是有效的,虽然它不会显示(大部分时间)预期的行为:
if ( $var = null ) { echo 'test'; }
虽然此处显示错误:
if ( null = $var ) { echo 'test'; }
然而,一个主要的缺点是这种风格的可读性丧失。但这取决于代码的读者和其他一些编码风格指南。
答案 2 :(得分:3)
这是一个yoda条件,我不知道任何好处,除了你不能在你不小心写的时候将值赋给变量
if( $foo = "bar" )
这里有一个链接以获取更多示例:
http://united-coders.com/christian-harms/what-are-yoda-conditions
答案 3 :(得分:1)
在这种情况下,比较会考虑帐户值和值的类型。这是一个严格的比较。
例如这段代码:
if (null == "") {
echo "null";
}
只要PHP将“”,0,null,false视为等效的空值,将打印“null”,除非使用严格比较来比较值本身的实际值和类型。
第二件事是为什么使用null === $ class是因为你不能将值赋值给null。虽然你可以成功地犯错并分配$ class = null。