_GET变量的奇怪行为

时间:2012-01-17 17:49:09

标签: php variables get

实际上这是我的代码:

echo "<pre>";
// get current vars
$p1 = isset($_GET['p1']) ? trim($_GET['p1']) : false;
$p2 = isset($_GET['p2']) ? trim($_GET['p2']) : false;
$p3 = isset($_GET['p3']) ? trim($_GET['p3']) : false;
$f1 = isset($_GET['f1']) ? trim($_GET['f1']) : false;
$f2 = isset($_GET['f2']) ? trim($_GET['f2']) : false;
$f3 = isset($_GET['f3']) ? trim($_GET['f3']) : false;
//Debug
echo "P1 from _GET: ".var_dump($p1);
echo "P2 from _GET: ".var_dump($p2);
echo "P3 from _GET: ".var_dump($p3);
echo "F1 from _GET: ".var_dump($f1);
echo "F2 from _GET: ".var_dump($f2);
echo "F3 from _GET: ".var_dump($f3);

当我去http://localhost/test/index.php?p2=foo&f3=bar时,我期待这个结果:

P1 from _GET: bool(false)
P2 from _GET: string(3) "foo"
P3 from _GET: bool(false)
F1 from _GET: bool(false)
F2 from _GET: bool(false)
F3 from _GET: string(3) "bar"

但是,这就是我得到的:

P1 from _GET: string(3) "foo"
P2 from _GET: bool(false)
P3 from _GET: bool(false)
F1 from _GET: bool(false)
F2 from _GET: string(3) "bar"
F3 from _GET: bool(false)

你能解释一下原因吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:8)

var_dump在您的echo语句实际执行之前输出。

echo "P1 from _GET: ".var_dump($p1);

应该成为:

echo "P1 from _GET: ";
var_dump($p1);

作为旁注,当执行此操作时,您实际上(自己测试)得到以下内容,这应该会更明显地发生了什么:

bool(false)
P1 from _GET: string(3) "foo"
P2 from _GET: bool(false)
P3 from _GET: bool(false)
F1 from _GET: string(3) "bar"
F2 from _GET: bool(false)
F3 from _GET: