首頁  >  文章  >  後端開發  >  變數名 PHP中取得變數的變數名稱的一段程式碼的bug分析

變數名 PHP中取得變數的變數名稱的一段程式碼的bug分析

WBOY
WBOY原創
2016-07-29 08:46:00887瀏覽

複製程式碼 程式碼如下:


/**
* 取得變數名稱
*
* @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),即恆等。
如果我理解錯了歡迎您指正,一起進步。
以上就介紹了變數名稱 PHP中取得變數的變數名稱的一段程式碼的bug分析,包含了變數名稱方面的內容,希望對PHP教學有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn