4

可能重复:
PHP - if 语句中的颠倒顺序
检查 null - 什么顺序?

检查 Zend Framework 发现它们以相反的方式进行所有变量检查:

public function setBootstrap($path, $class = null) {

   if (null === $class) {    // instead of if($class === null)
      $class = 'Bootstrap';
   }

这样做的原因是什么?

这也适用于 Java 和 C++ 编程吗?

4

4 回答 4

7

有些人认为这有助于他们避免写一个单一=的(一个作业而不是一个相等的比较)

我相信这样做的好处远小于可读性的损失(因此可维护性!)

不测试代码的人可能会依赖这种技巧。回答你的问题,是的,它适用于大多数从 C 派生语法的语言——我的意思是合适,不推荐。

于 2012-06-13T12:58:42.590 回答
5

这种风格称为尤达条件

$variable === value基本上它与通常的 ( ) 样式具有相同的行为,但有一个优点:

如果您写错或写错了,编译器会抛出=错误。由于您无法重新分配常量(在示例中为值),因此开发人员会立即识别出由于编译器错误/警告导致的错误,从而免除了耗时的错误搜索。=====null

因此,以下行将是有效的,尽管它不会显示(大多数情况下)预期的行为:

if ( $var = null ) { echo 'test'; }

此处显示错误:

if ( null = $var ) { echo 'test'; }

然而,一个主要的缺点是这种风格失去了可读性。但这取决于代码的读者和其他一些编码风格指南。

于 2012-06-13T12:58:56.413 回答
3

这是一个尤达条件,我不知道有什么好处,除了当你不小心写的时候你不能把值赋给变量

if( $foo = "bar" )


这里有更多示例的链接:

http://united-coders.com/christian-harms/what-are-yoda-conditions

于 2012-06-13T13:00:23.613 回答
1

在这种情况下,比较会考虑值和值的类型。这是一个严格的比较。

例如这段代码:

if (null == "") {
  echo "null";
}

将打印“null”,只要 PHP 将“”、0、null、false 视为等效的空值,除非使用严格比较来比较实际值和值本身的类型。

第二件事是为什么使用 null === $class 是因为您不能为 null 赋值。而您可以成功犯错并分配 $class = null。

于 2012-06-13T12:56:57.170 回答