检查变量的值时,反向条目(null === $ value)的含义是什么?

时间:2012-06-13 12:54:45

标签: php if-statement isnull

  

可能重复:
  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 ++编程?

4 个答案:

答案 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。