Странное поведение переменных _GET - PullRequest
2 голосов
/ 17 января 2012

На самом деле это мой код:

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 Ответ

8 голосов
/ 17 января 2012

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:
...