如果變量不是無效值,那麼如何在僅在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-我想我得到了你,所以在這種情況下,變量賦值**總是**。這實際上使得它毫無意義,除非我添加一個條件 –