在if语句中使用一个等号

时间:2014-05-15 08:48:28

标签: php

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

if($foo == 'bar'){
    //Run code
}

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

if($foo = 'bar'){
    //Run code
}

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

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

PHP是否允许您以这种方式设置变量?

4 个答案:

答案 0 :(得分:7)

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

if (($err = some_function())) {
    echo "Error: " . $err;
}

答案 1 :(得分:4)

最常见的用例之一是确保某些东西存在(或者是真实的),然后在块中使用它,例如:

while ($row = $dbConnection->fetch()) { //Make sure that $dbConnection->fetch() is not false or NULL...
    //You can use $row here!
}

答案 2 :(得分:4)

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

这可以是一个表达式:

if(!$db=new database()) die("NO DATABASE CONNECTION");

但它的背景是表达式$a="abc"以不同的方式进行评估:

  1. 将$ a的值设置为abc
  2. 其余表达方式为:if($a)
  3. $ a is!= 0,所以这是真的最重要的
  4. 表达式为真,进入if-case
  5. 因此,表达式被计算为if(true),因为优先级表是 运算符使表达式成功。这不是PHP的错误,它是 而是TRUE / FALSE的定义以及如何评估事物。

    这也可以在循环中使用,如使用$db->fetch()

    的循环表达式的另一个答案中所示

答案 3 :(得分:1)

简化,例如。

if ($var instanceof MyClass && $obj = $var->getResultObject()){
    /// do something
}

而不是

if ($var instanceof MyClass){
    $obj = $var->getResultObject()
    if ($obj){
       /// do something
    }
}