一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP中獲取變量的變量名的一段代碼的bug分析

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

2019-12-04 11:16PHP教程網 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),即恒等。 
如果我理解錯了歡迎您指正,一起進步。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91丝袜足控免费网站xx | 美女扒开粉嫩尿口漫画 | 息与子中文字幕完整在线 | 91精品国产免费久久 | 亚洲免费在线观看 | 白丝美女用胸伺候主人 | 亚洲国产AV一区二区三区四区 | 国产东北三老头伦一肥婆 | 天天操天天干天天 | 红怡院欧洲| 久久电影院久久国产 | 四虎综合九九色九九综合色 | ass巨大胖女人sias | 精品国产一区二区在线观看 | 亚洲国产视频一区 | 亚州日韩精品AV片无码中文 | 国内精品久久久久影院男同志 | 日本一区二区免费在线 | 国产精品久久久久久久久久久久 | 精品午夜寂寞影院在线观看 | 亚洲国产AV一区二区三区四区 | 国产精品边做边接电话在线观看 | 欧美精品一区视频 | 免费特黄视频 | 女黑人尺寸bbb | 亚洲欧美日韩成人一区在线 | 国产在线看片网站 | 丝袜高跟小说 | 久久婷婷五月综合色精品首页 | 日韩久久影院 | 免费观看伦理片 | 午夜香蕉成视频人网站高清版 | 给我免费观看的视频在线播放 | 亚洲精品国产综合久久一线 | 黄+色+性+人免费 | 无耻之徒第十一季在线观看 | 亚洲女bbwxxxx另类 | 国产亚洲sss在线播放 | 色哟哟精品| 亚洲狠狠婷婷综合久久久久网站 | 天美网站传媒入口网址 |