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
我正在开发供个人使用的网络图书馆。我以为我会很聪明并使用可变变量使我的库轻松支持所有请求方法。
我有:
$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