存档

文章标签 ‘$_GET’

[转]GPC的思考:$_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别

2010年6月13日 admin 没有评论

原文地址:http://52php.com.cn/index.php/archives/6/

总结:
$_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别。
1.关系:$_REQUEST包含了$_GET、$_POST、$_COOKIE的所有内容,是它们的集合体。
2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一个副本。改变$_REQUEST的值不影响$_GET等,反之亦然。
3.GET和POST同名的情况下,$_REQUEST取的是POST的值。COOKIE与GET或POST重名的情况下,$_REQUEST取的是COOKIE的值。COOKIE的优先级最高。

测试开始。

测试1:

echo ‘

';//源格式打印
//URL加上m=xxoo来测试$_GET
    print_r($_REQUEST);//首先打印内容
    print_r($_GET); 

    $_REQUEST = array();//清空$_REQUEST
    echo $_GET['m'];
echo '

‘;
测试结果:$_GET['m']的值是xxoo。

测试2:

echo ‘

';//源格式打印
//URL加上m=xxoo来测试$_GET
    print_r($_REQUEST);
    print_r($_GET); 

    $_GET = array();//清空
    print_r($_REQUEST);
echo '

‘;
测试结果:$_REQUEST['m']的值是xxoo。

结论:对$_REQUEST的操作没有影响到$_GET,反之亦然。$_REQUEST只是包含了一个$_GET的副本(the same as $_POST 哈哈)。

————————————华丽的分隔线 :) —————————————————
好。继续
测试3

//POST-GET重名测试
//从其他页面POST传送一个m的值为post,action地址加上m=get
print_r($_REQUEST);
print_r($_GET);
print_r($_POST);
结果:$_REQUEST['m'] == ‘post’。
结论:同时提交GET和POST且同名,$_REQUEST取的是POST的值。(可能是POST优先级更高。)

测试4

//cookie与post\get 重名测试
setcookie(‘m’, ‘cookie’, time()+3600);//先把COOKIE种上,名字为m,值为cookie。然后刷新。(COOKIE要刷新才生效)

//从其他页面POST传送一个m的值为post,action地址加上m=get
print_r($_REQUEST);
结果:$_REQUEST['m'] == ‘cookie’。结论:COOKIE的优先级最高。

分类: PHP 标签: ,