"生成"来自变量的$ _GET [' xyz']

时间:2015-01-05 16:34:06

标签: php variables

我有两个变量:

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

我现在需要这个:

$parameter = $_GET['id'];

我试过这样的事情:

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

但它不起作用。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

尝试:

$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

另外,结果是there is a one-liner that will do this

${$method}[$var];

答案 1 :(得分:1)

由于您没有集中任何字符串来形成变量名称,只需将其放入{}

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

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

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

答案 2 :(得分:0)

这基本上是一个变量变量:

$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搜索&#34;歧义&#34;

答案 3 :(得分:0)

您可以尝试以下方法:

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

constant()函数允许您按字符串名称引用filter_input()函数的INPUT_GET常量值。

使用此方法,您正在检索该值,并可以使用此页面上的filter values对其进行过滤/清理,以便在一次设置中获得额外的安全性。