程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP獲取變量的變量名的一段代碼的bug

PHP獲取變量的變量名的一段代碼的bug

編輯:關於PHP編程

       百度一下關於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),即恆等。

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved