PHP - if语句中的赋值范围

时间:2017-05-03 16:32:36

标签: php variables scope variable-assignment

如果变量不是无效值,如何在if if块中的if语句中对变量进行delcare?

此外,代码中$var的范围如下:

if(($var = funky()) != null) {}

我可以在$var区块之外引用if吗?

1 个答案:

答案 0 :(得分:1)

PHP中的赋值表达式返回指定的值。来自t he documentation

  

赋值表达式的值是指定的值。

因此,如果funky()返回的任何内容评估为松散等于null的内容,$var = funky()将评估为false,因此if块将不会被执行。

但是,在if条件下执行分配不会影响已分配变量的范围。在赋值语句之后,$var将在当前范围内(在if块之外的中)。

例如:

function funky() {
    return false;
}

if(($var = funky()) != null) {
    echo 'something';
}

var_dump($var);

在这里,您只需看boolean false

我能想到确保变量仅在if块中可用的唯一方法是将其分配到那里并在块结束之前取消设置。

if (funky() != null) {  // evaluate funky() without assigning
    $var = funky();     // call funky() again to assign
    // do stuff
    unset($var);
}

但我真的不能想到有任何理由这样做。