PHP - if 语句中的赋值范围

PHP - Scope of assignment within if statement

如果变量不是空值,我如何在 if 语句中删除仅在 if 块中的变量?

此外,$var 的范围是什么,例如:

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

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

一个赋值表达式在PHPreturns赋值。来自 the documentation:

The value of an assignment expression is the value assigned.

因此,如果 funky() returns 的计算结果大致等于 null$var = funky() 将计算为 false,因此 if 块不会被执行。

不过,在 if 条件下进行赋值不会影响赋值变量的范围。在赋值语句之后,$var 将在当前范围内可用(在 内部和 外部)。

例如:

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);
}

但我真的想不出有什么好的理由这样做。