如果变量不是无效值,那么如何在仅在if
块中出现的if语句中删除一个变量?PHP - if语句中的赋值范围
而且,什么是$var
的像代码范围:
if(($var = funky()) != null) {}
我可以参考$var
的if
块之外?
如果变量不是无效值,那么如何在仅在if
块中出现的if语句中删除一个变量?PHP - if语句中的赋值范围
而且,什么是$var
的像代码范围:
if(($var = funky()) != null) {}
我可以参考$var
的if
块之外?
PHP中的赋值表达式返回分配的值。从t he documentation:
赋值表达式的值是分配的值。
因此,如果任何funky()
收益计算为松散等于null
东西,$var = funky()
将评估为假,所以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);
}
但我真的想不出有什么好的理由来做到这一点。
哇。我很惊讶'$ var'可用*外部* if块 –
@KolobCanyon为什么?根本没有改变范围(if语句不是闭包)。你基本上只是分配了一个变量,然后写了一个if语句,除非你在同一行中完成了所有的操作。 – billyonecan
@billyonecan Gotcha。不知道。我一直试图分配变量,然后在下一行执行if语句,但是我看到了一些代码,这引出了我的这个问题 –
'if($ var = funky())' - 我认为那是伪代码?如果没有,那么你正在做的是分配'='而不是比较'==',除非你想要做什么。 –
*“if块内的代码是否仍然执行或者是否还需要条件?” - 是的,因为它总是被认为是TRUE,因为它是一个赋值。你的编辑:*“如if(!empty($ var = funky()))”* - 只有当它不是空的。 –
@ Fred-ii-我想我得到了你,所以在这种情况下,变量赋值**总是**。这实际上使得它毫无意义,除非我添加一个条件 –