我在学习WordPress源代码(PHP)时看到了这段代码,你可以看到他们将所有的GET和POST值合并/转换为一个请求数组。
现在据我所知,通过调用$_REQUEST就已经可以访问$_GET和$_POST了而不需要使用array_merge()函数,那么为什么他们要这样做呢?
$_REQUEST = array_merge($_GET, $_POST);
我在学习WordPress源代码(PHP)时看到了这段代码,你可以看到他们将所有的GET和POST值合并/转换为一个请求数组。
现在据我所知,通过调用$_REQUEST就已经可以访问$_GET和$_POST了而不需要使用array_merge()函数,那么为什么他们要这样做呢?
$_REQUEST = array_merge($_GET, $_POST);
$_REQUEST
是$_GET
、$_POST
和$_COOKIE
的合并。此外,这些superglobals变量合并到$_REQUEST
中的顺序取决于ini设置variables_order
,并且自PHP 5.3.0以来还可以受到request_order
的影响。$_REQUEST
仅由$_GET
和$_POST
组成,并按特定顺序合并,如果他无法访问ini设置(例如在共享主机上)。你知道,variables_order
和request_order
不能针对每个脚本进行配置。$_REQUEST
默认包含 $_GET
、$_POST
和 $_COOKIE
数组的内容。也许他们想要从中排除 COOKIE 变量,因为它通常不用于这个目的。
如果您拥有一个具有相同名称的GET变量和POST变量,那么它将选择POST变量而不是GET变量。
此外,您可能不希望在$_REQUEST变量中使用Cookies。
我不知道你看到的情况具体原因,但我曾经看到过这种情况。当对一个数组中的值进行了一些处理,并且希望将这些更改合并回 $_REQUEST 中时,就可以这样做,以便使用 $_REQUEST 的任何人都可以获得更改,即使它们是对 $_POST 或 $_GET 变量进行的。
出现这种情况的原因是像 Wordpress 这样的情况,因为插件开发人员可能使用其中任何一个变量来访问数据,而 Wordpress 核心需要确保它们都获取相同的数据。
为什么不直接对 $_REQUEST 进行操作呢?因为 $_REQUEST 包含大量额外的信息,$_POST 和 $_GET 没有。您可能不希望将处理应用于所有这些额外的位。