"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 以在一个设置中获得额外的安全性。
我有两个变量:
$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 以在一个设置中获得额外的安全性。