"Build" $_GET['xyz'] 来自变量

"Build" $_GET['xyz'] from variables

我有两个变量:

$method = "_GET";
$var = "id";

我现在需要这个:

$parameter = $_GET['id'];

我试过这样的事情:

$parameter = ${$method.'[\''.$var.'\']'};

但是没用。有什么想法吗?

尝试:

$data = $$method;
$parameter = $data[ $var ];

以下:

$method = '_GET';
$var = 'id';

$data = $$method;
print_r($data);
echo $data[ $var ];

将输出:

Array
(
    [id] => test
)
test

假设查询字符串是?id=test

@Leggendario 指出了一个有趣的警告:这在全局范围之外不起作用,即使 $_GET 是一个超级全局。您必须添加 global $$method 才能在函数中引用 $$method

另外,结果:

${$method}[$var];

这基本上是一个变量:

$method = '_GET';
$var = 'id';

$foo = $$method[$var];

事实证明根本行不通...是的 php 一致性,我今天学到了新东西。

这个有效:

php > $_GET['id'] = 'foo';
php > $method = '_GET';
php > $offset = 'id';
php > echo ${$method}[$offset];
foo

结果已记录在案:http://php.net/manual/en/language.variables.variable.php 搜索 "ambiguity"

因为你没有集中任何字符串来形成变量名,所以把它放在 {}:

$parameter = ${$method}[$var];

由于只有 _GET_POST 这两种方法,另一种可能的解决方案是使用 ternary operator 代替:

$parameter = $method == "_GET" ? $_GET[$var] : $_POST[$var];

您可以尝试以下方法:

filter_input(constant("INPUT" . $method), $var);

constant() function let's you reference the INPUT_GET constant value for the filter_input() 字符串名称函数。

使用此方法,您将检索值并可以选择 filter/sanitize 使用此页面上的 filter values 以在一个设置中获得额外的安全性。