10

我刚刚在研究 wordpress 源代码 (PHP) 时看到了这段代码,您可以看到它们将所有 get 和 post 值合并/转换为 1 个请求数组。

现在,据我所知,$_GET 和 $_POST 已经可以通过调用 $_REQUEST而不使用 array_merge() 函数来获得,所以有什么想法为什么要这样做?

$_REQUEST = array_merge($_GET, $_POST);
4

4 回答 4

20

这是因为默认$_REQUEST$_GET, $_POSTAND的合并$_COOKIE。此外,这些超全局变量的合并顺序$_REQUEST取决于 ini 设置variables_order,并且从 PHP 5.3.0 开始也可能受 request_order. 所以我的猜测是,如果开发人员无权访问 ini 设置(例如在共享主机上),则开发人员希望确保$_REQUEST仅包含$_GETand 并按特定顺序合并。$_POST您会看到,variables_order并且request_order不能在每个脚本的基础上进行配置。

高温高压

于 2009-09-14T00:19:35.970 回答
6

$_REQUEST默认包含$_GET$_POST$_COOKIE数组的内容。也许他们想从中排除 COOKIE 变量,因为它通常不用于此目的。

于 2009-09-14T00:13:02.237 回答
2

如果您有一个同名的 GET 变量和一个 POST 变量,它将选择 POST 变量而不是 GET 变量。

此外,您可能不希望 $_REQUEST 变量中的 cookie。

于 2009-09-14T00:12:26.823 回答
1

我不知道具体为什么它是在你看到它的地方完成的,但我之前已经看到,当对一个或另一个数组中的值进行了一些处理并且你想将这些更改合并回 $_REQUEST 以便任何人即使对 $_POST 或 $_GET 变量进行了更改,使用 $_REQUEST 也会得到更改。

这出现在像 Wordpress 这样的情况下,因为插件开发人员可能会使用这些变量中的任何一个来访问数据,而 Wordpress 核心需要确保它们都获得相同的数据。

你为什么不想直接对 $_REQUEST 做呢?因为 $_REQUEST 包含大量 $_POST 和 $_GET 没有的额外信息。您可能不想将处理应用于所有这些额外的位。

于 2009-09-14T00:12:27.760 回答