天天看點

PHP中全局變量$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的關系和差別 (轉載)

原文位址找不到了 sorry

PHP中全局變量$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的關系和差別 (轉載)

$_REQUEST、 $_GET、 $_POST、 $_COOKIE  的關系和差別:

1.關系:$_REQUEST包含了$_GET、$_POST、$_COOKIE的所有内容,是它們的集合體。(測試1)

2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一個副本。改變$_REQUEST的值不影響$_GET等,反之亦然。(測試2)

3.GET和POST同名的情況下,$_REQUEST取的是POST的值。(測試3)

4.COOKIE與GET或POST重名的情況下,$_REQUEST取的是COOKIE的值。COOKIE的優先級最高。(測試4)

測試開始。

測試1:

<code>echo '&lt;pre&gt;';//源格式列印 //URL加上m=xxoo來測試$_GET     print_r($_REQUEST);//首先列印内容     print_r($_GET);</code>

<code></code>

<code>    $_REQUEST = array();//清空$_REQUEST     echo $_GET['m']; echo '&lt;/pre&gt;'; </code>

測試結果:$_GET['m']的值是xxoo。

測試2:

<code>echo '&lt;pre&gt;';//源格式列印 //URL加上m=xxoo來測試$_GET     print_r($_REQUEST);     print_r($_GET);</code>

<code>    $_GET = array();//清空     print_r($_REQUEST); echo '&lt;/pre&gt;'; </code>

測試結果:$_REQUEST['m']的值是xxoo。

結論:對$_REQUEST的操作沒有影響到$_GET,反之亦然。$_REQUEST隻是包含了一個$_GET的副本(the same as $_POST 哈哈)。

測試3

<code>//POST-GET重名測試 //從其他頁面POST傳送一個m的值為post,action位址加上m=get     print_r($_REQUEST);     print_r($_GET);     print_r($_POST); </code>

結果:$_REQUEST['m'] == 'post'。

結論:同時送出GET和POST且同名,$_REQUEST取的是POST的值。(可能是POST優先級更高。)

測試4

<code>//cookie與post\get 重名測試 setcookie('m', 'cookie', time()+3600);//先把COOKIE種上,名字為m,值為cookie。然後重新整理。(COOKIE要重新整理才生效)</code>

<code>//從其他頁面POST傳送一個m的值為post,action位址加上m=get print_r($_REQUEST); </code>

結果:$_REQUEST['m'] == 'cookie'。結論:COOKIE的優先級最高。