Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';检查变量值时,反向项(null==$value)的含义是什么?_Php_If Statement_Isnull - Fatal编程技术网

Php 什么';检查变量值时,反向项(null==$value)的含义是什么?

Php 什么';检查变量值时,反向项(null==$value)的含义是什么?,php,if-statement,isnull,Php,If Statement,Isnull,可能重复: 检查Zend Framework发现,它们以相反的方式执行所有变量检查: public function setBootstrap($path, $class = null) { if (null === $class) { // instead of if($class === null) $class = 'Bootstrap'; } 这样做的原因是什么 这也是适用于java和C++编程的吗?< /p> 在这种情况下,比较考虑了值和值的类型。

可能重复:

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

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

   if (null === $class) {    // instead of if($class === null)
      $class = 'Bootstrap';
   }
这样做的原因是什么


这也是适用于java和C++编程的吗?< /p> 在这种情况下,比较考虑了值和值的类型。这是一个严格的比较

例如,此代码:

if (null == "") {
  echo "null";
}
将打印“null”,只要PHP将“”0、null、false视为等效的空值,除非使用严格比较来比较实际值和值本身的类型


第二件事是为什么使用null==$class是因为您不能将值赋给null。然而,您可以成功地犯错误并将$class=null赋值。

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

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


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

这种风格被称为yoda conditions

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

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

因此,下面这行是有效的,尽管它(大部分时间)不会显示预期的行为:

if ( $var = null ) { echo 'test'; }
此时会显示一个错误:

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

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

这是一个yoda条件,我不知道有什么好处,除非您在意外写入时无法为变量赋值

if( $foo = "bar" )

以下是更多示例的链接:


不久前,我在这里回答了一个非常类似的问题:有了平等,这是同样的事情。如果两个值相等,则表达式为真;不管他们站在哪一边。在我的店里,我们称之为“Yoda代码”。问题是元素的顺序(null在$value之前,而不是$value在null之前),而不是等号的数量(严格的比较)@mishu在写这部分,我的更新和你的评论同时出现;)好的,我现在看到更新了