PHP 变量变量请求方法

PHP Variable Variable Request Method

提问人:csga5000 提问时间:2/16/2015 最后编辑:Communitycsga5000 更新时间:4/5/2016 访问量:558

问:

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

我有:

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

但我得到:

未定义变量:_POST

打印到我的 php 错误日志中。

我只是好奇我的想法在概念上是否有缺陷,以及为什么当以下情况发生时逻辑不起作用:

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

编辑:

以下方法确实有效:

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

重复:无法通过函数中的变量访问超全局变量?

为了修复,我做了:

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

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

php 请求 变量

评论

0赞 VeeeneX 2/16/2015
你为什么使用忍者代码?
1赞 sectus 2/16/2015
无法通过函数中的变量访问可能的超全局变量副本?
0赞 csga5000 4/5/2016
@VeeeneX我使用此代码来支持多种请求方法。主要是 GET 和 POST,我不知道这是否适用于 PATCH/PUT/DELETE 等。请注意我最近的回答,这可能是更好的方法

答:

0赞 delatbabel 2/16/2015 #1

您收到的错误消息是正确的,没有 $_POST 这样的变量。

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

假设 $_SERVER['REQUEST_METHOD'] 是 “POST”,它将用于 HTTP POST 请求。

因此$request == “_POST”

$request = $$request;

$request = $_POST;

你到底想在这里实现什么?

评论

0赞 csga5000 4/5/2016
@deltababel 我神奇地这样做的原因是,服务器可以用于多个请求方法。例如,获取和发布
0赞 csga5000 4/5/2016 #2

为了让它像我在帖子中所说的那样工作:

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

为什么?

因为 $_POST 和 $_GET 是全局变量,需要这样访问。在函数/类中,您通常会执行以下操作:

global $_POST;

使用前。

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

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

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

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

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

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