Superglobals as Concepts
Request Priority
A program can choose which request source should win when several sources contain a value.
explicit source order
Choosing an order explicitly is clearer than assuming every request source has the same meaning.
Request Priority
request_priority.php
Replay: real traced execution (multi-file project)
<?php
$preferred = "get";
$_GET["mode"] = "query";
$_POST["mode"] = "form";
$_COOKIE["mode"] = "stored";
if ($preferred === "post") {
$mode = $_POST["mode"];
} elseif ($preferred === "cookie") {
$mode = $_COOKIE["mode"];
} else {
$mode = $_GET["mode"];
}
echo "preferred=" . $preferred . "\n";
echo "mode=" . $mode . "\n";
<?php
$preferred = "post";
$_GET["mode"] = "query";
$_POST["mode"] = "form";
$_COOKIE["mode"] = "stored";
if ($preferred === "post") {
$mode = $_POST["mode"];
} elseif ($preferred === "cookie") {
$mode = $_COOKIE["mode"];
} else {
$mode = $_GET["mode"];
}
echo "preferred=" . $preferred . "\n";
echo "mode=" . $mode . "\n";
<?php
$preferred = "cookie";
$_GET["mode"] = "query";
$_POST["mode"] = "form";
$_COOKIE["mode"] = "stored";
if ($preferred === "post") {
$mode = $_POST["mode"];
} elseif ($preferred === "cookie") {
$mode = $_COOKIE["mode"];
} else {
$mode = $_GET["mode"];
}
echo "preferred=" . $preferred . "\n";
echo "mode=" . $mode . "\n";
$preferred ← get, $_GET["mode"] ← query, $_POST["mode"] ← form
1<?php2$preferred→ get = "get"; //@preferred="post", "cookie"3$_GET["mode"]→ query = "query";4$_POST["mode"]→ form = "form";5$_COOKIE["mode"]→ stored = "stored";67if ($preferred === "post") {8 $mode = $_POST["mode"];9} elseif ($preferred === "cookie") {10 $mode = $_COOKIE["mode"];11} else {12 $mode→ query = $_GET["mode"]query;13}1415echo "preferred=" . $preferredget . "\n";16echo "mode=" . $modequery . "\n";outputpreferred=get mode=queryvalues this stepArray$_GETArray$_POSTArray$_COOKIE
$preferred ← post, $_GET["mode"] ← query, $_POST["mode"] ← form
1<?php2$preferred→ post = "post";3$_GET["mode"]→ query = "query";4$_POST["mode"]→ form = "form";5$_COOKIE["mode"]→ stored = "stored";values this stepArray$_GETArray$_POSTArray$_COOKIE$mode ← form
7if ($preferredpost === "post") {8 $mode→ form = $_POST["mode"]form;9} elseif ($preferred === "cookie") {echo "preferred=" . $preferred . " ";
15echo "preferred=" . $preferredpost . "\n";16echo "mode=" . $modeform . "\n";outputpreferred=post mode=form
$preferred ← cookie, $_GET["mode"] ← query, $_POST["mode"] ← form
1<?php2$preferred→ cookie = "cookie";3$_GET["mode"]→ query = "query";4$_POST["mode"]→ form = "form";5$_COOKIE["mode"]→ stored = "stored";67if ($preferred === "post") {8 $mode = $_POST["mode"];9} elseif ($preferred === "cookie") {10 $mode→ stored = $_COOKIE["mode"]stored;11} else {12 $mode = $_GET["mode"];13}1415echo "preferred=" . $preferredcookie . "\n";16echo "mode=" . $modestored . "\n";outputpreferred=cookie mode=storedvalues this stepArray$_GETArray$_POSTArray$_COOKIE