簡體   English   中英

通過變量“構建” $ _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];

由於您不需要集中任何字符串來形成變量名,因此只需將其放在{}

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

由於僅有的兩種方法是_GET_POST ,所以另一種可能的解決方案是改用三元運算符

$parameter = $method == "_GET" ? $_GET[$var] : $_POST[$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搜索“歧義”

您可以嘗試以下方法:

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

constant()函數讓您通過字符串名稱引用filter_input()函數的INPUT_GET常量值。

使用此方法,您可以檢索該值,並可以選擇使用此頁面上的過濾器值對其進行過濾/消毒,以提高安全性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM