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);
}
但我真的想不出有什么好的理由这样做。
如果变量不是空值,我如何在 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);
}
但我真的想不出有什么好的理由这样做。