2014-07-03 96 views
0

所以正確調用,我有這樣的代碼:雙美元變量沒有在函數

$str = '_POST'; 

print_r($$str); 
//Works just fine 

function request_var($name){ 
    global $_POST; 
    $str = '_POST'; 
    print_r($$str); 
} 

request_var('username'); 
// _POST not defined 

什麼的request_var功能應該通過$ _POST,$ _GET,和$ _COOKIE變量做的是循環(按此順序),如果它找到傳遞的變量名稱,請停止查找並返回該值。

我有一個系統回來,按預期工作,但由於某種原因,現在它告訴我_POST not defined,我不明白爲什麼?第一部分沒有錯誤,但第二部分完全不起作用。是不是$ _POST超級全球? (注:我只在global $_POST中加入,看看能不能修好)

有沒有想法?

編輯:基於由其他用戶提供的答案(不能看到自己的名字在編輯畫面),我的解決辦法是這樣的:

function request_var($name,$default='',$force_type=false){ 
     $end = $default; 
     $arrays = [$_POST,$_GET,$_COOKIE]; 

     foreach($arrays as $array){ 
      if(isset($array[$name])){ 
       $end = $array[$name]; 
       break; 
      } 
     } 

     return ($force_type) ? settype($end,gettype($default)) : $end; 

    } 

    echo request_var('username'); 
    //Works just fine 
+0

是$ _ POST是超級全球http://www.php.net/manual/en/language.variables.superglobals.php –

+0

請你問的問題,你可以看到,重複之前的一些研究有完全相同的問題,並解決您的問題 –

+0

我做了,但「雙美元符號不適用於帖子」除了超全球化網頁沒有給出任何結果,我沒有讀得太遠。 – Jhecht

回答

2

警告請注意,可變的變量不能用於函數或類方法中的PHP Superglobal數組。

source

+0

嗯。將不得不重新考慮代碼。可能已經發誓我以前使用過這個相同的語法,但那是幾乎整個版本之前,所以誰知道。謝謝!編輯:只要它會讓我接受答案 – Jhecht

+0

只需將超全局變量放在函數之外的數組中,然後使用它。 –

+0

檢查我編輯的問題,這就是我決定繞過它的方式 – Jhecht