最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2011年07月07日 11:55:49   作者:  
百度一下關(guān)于php獲取變量名的辦法都是下面這個函數(shù)。但是用了發(fā)現(xiàn)有點bug
復(fù)制代碼 代碼如下:

/**
* 獲取變量名
*
* @param $string
* @return $string
*
* $test = "helo";
* $test2 = "helo";
* getVarName($test2);
*/
function getVarName(&$src){
//存儲當(dāng)前變量值
$save = $src;
//存儲所有變量值
$allvar = $GLOBALS;
//在函數(shù)中不要直拉遍歷$GLOBALS,會出現(xiàn)堆棧問題
foreach($allvar as $k=>$v){
//變量值相同,可能不是相同變量,因多個變量的值可能相同
if ($src == $v){
//改變當(dāng)前變量$src的值
$src = 'change';
//如果$GLOBALS[$k]也跟著改變,那就是同一個變量。
if ($src == $GLOBALS[$k]){
//echo "\$$k name is $k
";
//還原變量值
$src = $save;
return $k;
}
}
}
}

copy下來后發(fā)現(xiàn)這個怎么測試結(jié)果有時候?qū)τ袝r候不對,想了很久,終于弄明白,雖然很簡單,但是自己還是記錄下,希望遇到同樣情況的同學(xué)注意。
比如:現(xiàn)在我測試
復(fù)制代碼 代碼如下:

$test2 = "hello";
$countNum=0;
echo getVarName($test2);
//按道理應(yīng)該輸出為”test2“,但是輸出的是"countNum",

因為函數(shù)中的
if ($src == $v) 這里存在問題 比如$src="hello", $GLOBALS里面有個變量$countNUm=0;
這時在循環(huán)的時候判斷 if ($src == $v) ,即"hello"==0,比較的結(jié)果為true,類型轉(zhuǎn)換的時候“hello“轉(zhuǎn)為整形為0,
然后就退出循環(huán)了,得到錯誤的結(jié)果。
一個解決辦法就是 if ($src == $v) 改為 if($src===$v),即恒等。
如果我理解錯了歡迎您指正,一起進(jìn)步。

相關(guān)文章

最新評論

临洮县| 山阳县| 斗六市| 克拉玛依市| 定日县| 崇阳县| 兴化市| 蕉岭县| 新津县| 阿勒泰市| 青岛市| 金华市| 罗平县| 开远市| 永康市| 横峰县| 永平县| 宁晋县| 甘肃省| 荥经县| 平塘县| 安龙县| 交城县| 肃北| 宁南县| 无极县| 石门县| 安丘市| 七台河市| 弋阳县| 元朗区| 杭州市| 武山县| 楚雄市| 滕州市| 永平县| 义马市| 柏乡县| 嘉定区| 盱眙县| 鄂州市|