我在研究wordpress源代码(PHP)时刚刚看到这段代码,你可以看到他们将mergre / turn all并将值发布到1个请求数组中。
现在据我所知,$ _GET和$ _POST已经可以通过使用array_merge()函数调用$ _REQUEST WITHOUT 了,所以任何想法为什么会这样做?
$_REQUEST = array_merge($_GET, $_POST);
答案 0 :(得分:18)
这是因为默认$_REQUEST
是$_GET
,$_POST
和$_COOKIE
的合并。此外,这些超全局变量合并到$_REQUEST
的顺序取决于ini设置variables_order
,从PHP 5.3.0开始也可能受request_order
的影响。
所以我的猜测是,开发人员希望确保$_REQUEST
仅包含$_GET
和$_POST
,如果他没有访问ini设置,则会以该特定顺序合并(在例如,共享主机)。您看,variables_order
和request_order
无法基于每个脚本进行配置。
HTH
答案 1 :(得分:6)
$_REQUEST
默认包含$_GET
,$_POST
和$_COOKIE
数组的内容。也许他们想要从中排除COOKIE变量,因为它通常不用于此目的。
答案 2 :(得分:3)
如果你有一个GET变量和一个名字相同的POST变量,那就是这样,它会在GET上选择一个POST变量。
您也可能不希望$ _REQUEST变量中包含cookie。
答案 3 :(得分:1)
我不清楚为什么在你看到它的地方完成了它,但是我已经看到在对一个或另一个数组中的值进行了一些处理之前已完成并且你想将这些更改合并回$ _REQUEST所以任何使用$ _REQUEST的人都会得到更改,即使它们是对$ _POST或$ _GET变量完成的。
这种情况出现在像Wordpress这样的情况下,因为插件开发人员可能正在使用这些变量来访问数据,而Wordpress核心需要确保他们都获得相同的数据。
为什么你不想直接对$ _REQUEST这么做?因为$ _REQUEST包含大量$ _POST和$ _GET没有的额外信息。您可能不希望将处理应用于所有这些额外的位。