PHP擷取變數的變數名的一段代碼的bug

來源:互聯網
上載者:User

   百度一下關於php擷取變數名的辦法都是下面這個函數。但是用了發現有點bug

  /**

  * 擷取變數名

  *

  * @param $string

  * @return $string

  *

  * $test = "helo";

  * $test2 = "helo";

  * getVarName($test2);

  */

  function getVarName(&$src){

  //儲存當前變數值

  $save = $src;

  //儲存所有變數值

  $allvar = $GLOBALS;

  //在函數中不要直拉遍曆$GLOBALS,會出現堆棧問題

  foreach($allvar as $k=>$v){

  //變數值相同,可能不是相同變數,因多個變數的值可能相同

  if ($src == $v){

  //改變當前變數$src的值

  $src = 'change';

  //如果$GLOBALS[$k]也跟著改變,那就是同一個變數。

  if ($src == $GLOBALS[$k]){

  //echo "$$k name is $k

  ";

  //還原變數值

  $src = $save;

  return $k;

  }

  }

  }

  }

  copy下來後發現這個怎麼測試結果有時候對有時候不對,想了很久,終於弄明白,雖然很簡單,但是自己還是記錄下,希望遇到同樣情況的同學注意。

  比如:現在我測試

  $test2 = "hello";

  $countNum=0;

  echo getVarName($test2);

  //按道理應該輸出為”test2“,但是輸出的是"countNum",

  因為函數中的

  if ($src == $v) 這裡存在問題 比如$src="hello", $GLOBALS裡面有個變數$countNUm=0;

  這時在迴圈的時候判斷 if ($src == $v) ,即"hello"==0,比較的結果為true,類型轉換的時候“hello“轉為整形為0,

  然後就退出迴圈了,得到錯誤的結果。

  一個解決辦法就是 if ($src == $v) 改為 if($src===$v),即恒等。

  如果我理解錯了歡迎您指正,一起進步。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.