2017-05-03 83 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語句,但是我看到了一些代碼,這引出了我的這個問題 –