在if语句中使用一个等号

Dan*_*son 5 php

在PHP if语句中,当我比较一个变量时,我需要使用两个==符号.例如,

if($foo == 'bar'){
    //Run code
}
Run Code Online (Sandbox Code Playgroud)

但如果我要使用这样的等号:

if($foo = 'bar'){
    //Run code
}
Run Code Online (Sandbox Code Playgroud)

这实际上会设置$foo变量.

为什么你需要在if语句中设置这样的变量?我想不出一个有用的实例,而且我所说的许多程序员都有同感.

有没有理由让PHP允许您以这种方式设置变量?

Jon*_*art 7

测试返回错误的函数的结果:

if (($err = some_function())) {
    echo "Error: " . $err;
}
Run Code Online (Sandbox Code Playgroud)

  • 注意一件事,在这些情况下注意"函数可能返回false或NULL"时请注意手册.由于NULL被隐式转换为false,您可能需要使用`if(($ err = some_function())!= = NULL)`获得你想要的行为. (2认同)

D. *_*lla 4

PHP 与 C 一样,允许将任何表达式写入 if 条件。

这可以是这样的表达式:

if(!$db=new database()) die("NO DATABASE CONNECTION");
Run Code Online (Sandbox Code Playgroud)

但它的背景是表达式$a="abc"以不同的方式求值:

  1. 将$a的值设置为abc
  2. 表达式的其余部分是:if($a)
  3. $a 是 != 0,所以这是真的最重要
  4. 表达式为真,进入if-case

因此表达式的计算结果为 if(true),因为运算符的优先级表使表达式成功。这不是 PHP 的错误,而是 TRUE/FALSE 的定义以及如何评估事物的错误。

这也可以在循环中使用,如循环表达式的另一个答案所示$db->fetch()