Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-if语句中的赋值范围_Php_Variables_Scope_Variable Assignment - Fatal编程技术网

PHP-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语句中删除仅进入
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语句,但我看到一些代码,其中一行…这导致了我这个问题