2017-05-03 82 views
1

如果变量不是无效值,那么如何在仅在if块中出现的if语句中删除一个变量?PHP - if语句中的赋值范围

而且,什么是$var的像代码范围:

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

我可以参考$varif块之外?

+1

'if($ var = funky())' - 我认为那是伪代码?如果没有,那么你正在做的是分配'='而不是比较'=​​=',除非你想要做什么。 –

+0

*“if块内的代码是否仍然执行或者是否还需要条件?” - 是的,因为它总是被认为是TRUE,因为它是一个赋值。你的编辑:*“如if(!empty($ var = funky()))”* - 只有当它不是空的。 –

+0

@ Fred-ii-我想我得到了你,所以在这种情况下,变量赋值**总是**。这实际上使得它毫无意义,除非我添加一个条件 –

回答

1

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

但我真的想不出有什么好的理由来做到这一点。

+0

哇。我很惊讶'$ var'可用*外部* if块 –

+0

@KolobCanyon为什么?根本没有改变范围(if语句不是闭包)。你基本上只是分配了一个变量,然后写了一个if语句,除非你在同一行中完成了所有的操作。 – billyonecan

+0

@billyonecan Gotcha。不知道。我一直试图分配变量,然后在下一行执行if语句,但是我看到了一些代码,这引出了我的这个问题 –