2011-03-29 57 views
5

以下兩個if s產生了不同的結果(第一個if回聲嗨,第二個沒有),爲什麼?爲什麼$t上的變量賦值沒有工作?這是由於$t的局部範圍在if有條件嗎?php變量裏面如果有條件的話

if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"]) && !empty($t)){ 
    echo 'hi' 
} 

if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"])){ 
    if(!empty($t))echo 'hi' 
} 
+0

[duplicate](http://stackoverflow.com/questions/5091986/unexpected-cast-to-boolean/5092026#5092026)? – meze 2011-03-29 02:15:47

回答

13

&&具有higher precedence=,因此第一個表達式被評價爲:

isset($_REQUEST['test']) && $t = (trim($_REQUEST['test']) && !empty($t)) 

由於!empty($t)之前任何被分配給$t進行評價時,表達式是false。您可以通過顯式設置括號解決這個問題,或者通過使用較少尷尬的方式來寫它:

if (isset($_REQUEST['test']) && trim($_REQUEST['test'])) { 
    echo 'hi'; 
} 

trim($_REQUEST['test'])將評估爲truefalse只是本身,沒有必要empty。如果你確實需要的trim MED值後,可以保存它像這樣:

if (isset($_REQUEST['test']) && ($t = trim($_REQUEST['test']))) { 
    echo 'hi'; 
} 
1

如果進行小的修改像這樣在你的代碼:

if(isset($_REQUEST["test"]) && ($t=trim($_REQUEST["test"])) && !empty($t)){ 
    echo '1: hi<br/>'; 
} 

if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"])){ 
    if(!empty($t)) 
     echo '2: hi<br/>'; 
} 

然後,兩個1: hi2: hi將印。差異是第一個$ t賦值的括號。