提问人:csga5000 提问时间:2/16/2015 最后编辑:Communitycsga5000 更新时间:4/5/2016 访问量:558
PHP 变量变量请求方法
PHP Variable Variable Request Method
问:
我正在开发一个供个人使用的网络图书馆。我以为我会很聪明,使用变量使我的库轻松支持所有请求方法。
我有:
$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']];
您也可以在函数或类之外使用我的原始代码。
答:
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
评论