PHP-if语句中的赋值范围
如果变量不是空值,如何在if语句中删除仅进入PHP-if语句中的赋值范围,php,variables,scope,variable-assignment,Php,Variables,Scope,Variable Assignment,如果变量不是空值,如何在if语句中删除仅进入if块的变量 另外,在以下代码中,$var的范围是什么: if(($var = funky()) != null) {} 我可以在if块之外引用$var吗?PHP中的赋值表达式返回赋值。从t: 赋值表达式的值是指定的值 因此,如果funky()返回的值大致等于null,则$var=funky()将计算为false,因此不会执行if块 但是,在if条件下进行赋值不会影响赋值变量的范围$var将在赋值语句之后的当前作用域(if块内部和外部)中可用 例如:
if
块的变量
另外,在以下代码中,$var
的范围是什么:
if(($var = funky()) != null) {}
我可以在
if
块之外引用$var
吗?PHP中的赋值表达式返回赋值。从t:
赋值表达式的值是指定的值
因此,如果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 (funky() != null) { // evaluate funky() without assigning
$var = funky(); // call funky() again to assign
// do stuff
unset($var);
}
但是我真的想不出有什么好的理由这么做。如果($var=funky())
-我认为这是伪代码?如果没有,那么您要做的是赋值,而不是比较,除非这是您想要做的。“If块中的代码是否仍会执行,或者我是否也需要一个条件?”-是的,因为它总是被认为是真的,因为它是赋值。您的编辑:“例如如果(!empty($var=funky())”—只有当它不是空的时候。它不总是真的,它将分配函数的返回值,并对其进行计算……这就是我刚才所说的,只是对上面评论的后半部分作了不同的解释。@Fred ii-我引用的是:“if块内的代码是否仍将执行,或者我是否也需要一个条件?”-是的,因为它始终被视为TRUE,因为它是一个赋值。<如果函数不返回truthyWow,它将不会执行。<我很惊讶$var
在if块外可用block@KolobCanyon为什么?你根本没有改变范围(if语句不是闭包).你基本上只是分配了一个变量,然后写了一个if语句,除了你用同样的方法做的line@billyonecan明白了。我不知道。我一直试图分配变量,然后在下一行执行if语句,但我看到一些代码,其中一行…这导致了我这个问题