_GET变量的奇怪行为

Sim*_*one 2 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);
Run Code Online (Sandbox Code Playgroud)

当我去的时候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"
Run Code Online (Sandbox Code Playgroud)

但是,这就是我得到的:

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)
Run Code Online (Sandbox Code Playgroud)

你能解释一下原因吗?

谢谢你的时间.

cee*_*yoz 8

var_dumpecho语句实际执行之前输出.

echo "P1 from _GET: ".var_dump($p1);
Run Code Online (Sandbox Code Playgroud)

应成为:

echo "P1 from _GET: ";
var_dump($p1);
Run Code Online (Sandbox Code Playgroud)

作为旁注,当这个被执行时,你实际上(自己测试)得到以下内容,这应该使得更明显的是:

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:
Run Code Online (Sandbox Code Playgroud)

  • +1呵呵,你发布了同样的答案,我要在我面前发布几秒钟 (2认同)