鉴于此输入: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;
}
答案 0 :(得分:7)
你应该使用括号:
if(($id=validkey($_GET['supply_id'])) && ($room=validkey($_GET['room'])))
否则,validkey($_GET['supply_id']) && $room=validkey($_GET['room'])
的结果会分配给$id
变量,因为&&
运算符的优先级高于=
答案 1 :(得分:3)
&&
运算符绑定比=
运算符强。
因此,您的代码基本上变为if ($id = (validkey($_GET['supply_id']) && $room = validkey($_GET['room'])))
- >在IF语句中的$foo = $bar
表达式周围添加括号。
答案 2 :(得分:2)
你的第二个例子中似乎有一个小错误 - $ id后的一个错误的引用。此外,您的第二种方法通常不赞成(在if结构中分配变量),因为它使代码更难以遵循。更清楚的是:
if (isset($_GET['supply_id']) && isset($_GET['room'])) {
$id=validkey($_GET['supply_id']); //18823
$room=validkey($_GET['room']); //248
if($id && $room) {
$arr=array('s'=>$id,'r'=>$room); //s=>18823, r=>248
}
}