2011-02-06 48 views
3

只學習php並查看別人的代碼。我不確定在這個函數中發生了什麼,在=運算符的左邊有'and'這個詞。它似乎是一個'沉默',如果正在使用,例如。 if $ arry = true and $ array2 = true then $ array2 + ='somthing';指定的PHP數組和

我似乎無法找到任何在網上任何參考。

function get_list_filter($filter = array()) { 
    global $current_user; 
    $sql = array(); 
    $filter["clientID"]   and $sql[] = sprintf("(WD_domain.clientID = %d)",$filter["clientID"]); 
    $filter["showDomainName"] and $sql[] = sprintf("(WD_domain.domain LIKE '%%%s%%')",$filter["showDomainName"]); 
    $filter["showManaged"]  and $sql[] = sprintf("(WD_domain.managed = %d)",$filter["showManaged"]); 
    return $sql; 
    } 
+0

我愛的PHP編譯器。它讓代碼如此...個人! – 2011-02-06 09:43:17

+2

這種技術被稱爲[短路評估](http://en.wikipedia.org/wiki/Short-circuit_evaluation)或短路。 – BoltClock 2011-02-06 09:47:15

回答

4

這意味着如果and的左側評估爲true,右側也會執行。實質上,如果clientID評估爲真(非假),則sprintf("(WD_domain.clientID = %d)",$filter["clientID"])將被添加到$sql陣列。

它是這樣做的懶辦法:

if($filter["clientID"]) { 
    $sql[] = sprintf("(WD_domain.clientID = %d)",$filter["clientID"]); 
} 
5
$foo and $bar = "baz"; 

是說誰上寫道,

if ($foo) 
    $bar = "baz"; 

恥辱的只是一個混亂的方式。

+0

它並不總是很糟糕:`確認()或重定向('/未確認);` – Petah 2011-02-06 11:06:04