給出這個輸入:http://example.com/item.php?room=248&supply_id=18823,以下2個塊應該產生相同的結果。他們爲什麼不呢?除了咖啡,我還缺少什麼?意外轉換爲布爾值?
此塊給出的預期值:
if (isset($_GET['supply_id']) && isset($_GET['room'])) {
$id=validkey($_GET['supply_id']); //18823
$room=validkey($_GET['room']); //248
$arr=array('s'=>$id,'r'=>$room); //s=>18823, r=>248
}
但是,如果我做了檢查,並在一個步驟中分配,$ ID最後等於1,而不是18823.爲什麼?
if (isset($_GET['supply_id']) && isset($_GET['room'])) {
if($id=validkey($_GET['supply_id']) && $room=validkey($_GET['room']))
$arr=array('s'=>$id",'r'=>$room); //s=>1, r=>248
}
這是我使用的功能:
function validkey($value){
if(is_scalar($value)){
$value=(int)$value;
return ($value>0) ? $value : false;
}
return false;
}
這就是答案。我之前遇到過這個問題,第一次遇到它會讓你感到困惑 - '&&'比'='具有更高的優先級。所以你必須把這個任務包裝在一個額外的括號裏。 – Andrew 2011-02-23 14:16:42
但是我認爲這種語法通常是一個壞主意 - 它使代碼更難以遵循,並且更容易出錯。 – BrynJ 2011-02-23 14:18:26
是的,或者使用我不喜歡的'AND'; – meze 2011-02-23 14:18:41