PHP可变可变请求方式

PHP Variable Variable Request Method

我正在开发供个人使用的网络图书馆。我以为我会很聪明并使用可变变量使我的库轻松支持所有请求方法。

我有:

$request = '_' . $_SERVER['REQUEST_METHOD'];
$request = $$request;

但我得到:

Undefined variable: _POST

打印到我的 php 错误日志。

我只是想知道我的想法在概念上是否存在缺陷,以及为什么逻辑在以下情况下无法工作:

$_a = 'b';
$b = '_a';
$c = $$b;

编辑:

以下确实有效:

$request = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;

副本: Superglobals can't be accessed via variable variables in a function?

为了修复我做了:

$request = $GLOBALS['_' . $_SERVER['REQUEST_METHOD']];

您也可以在函数之外使用我的原始代码或 class。

您收到的错误消息是正确的,没有 $_POST.

这样的变量
$request = '_' . $_SERVER['REQUEST_METHOD'];

我们假设 $_SERVER['REQUEST_METHOD'] 是 "POST",它将用于 HTTP POST 请求。

因此 $request == "_POST"

$request = $$request;

$request = $_POST;

您到底想在这里实现什么目标?

让它像我在 post 中所说的那样工作:

$request = $GLOBALS['_' . $_SERVER['REQUEST_METHOD']];

为什么?

因为 $_POST 和 $_GET 是全局变量,需要这样访问。在 functions/classes 中你通常会做这样的事情:

global $_POST;

使用前

您也可以在函数之外使用原始代码或 class。

在这种情况下更好的方法?

我的目的是支持多种请求方法。我不认为这适用于 PUT/PATCH/DELETE 等。我建议您改用:

$requestdata = fopen("php://input", "r");

参见:http://php.net/manual/en/features.file-upload.put-method.php

这可能不适用于 url 仅参数请求正文。不确定。 (如果是这种情况,那么对于获取请求,您需要使用 $_GET