PHP中獲取變量的變量名的一段代碼的bug分析
更新時(shí)間:2011年07月07日 11:55:49 作者:
百度一下關(guān)于php獲取變量名的辦法都是下面這個(gè)函數(shù)。但是用了發(fā)現(xiàn)有點(diǎn)bug
復(fù)制代碼 代碼如下:
/**
* 獲取變量名
*
* @param $string
* @return $string
*
* $test = "helo";
* $test2 = "helo";
* getVarName($test2);
*/
function getVarName(&$src){
//存儲(chǔ)當(dāng)前變量值
$save = $src;
//存儲(chǔ)所有變量值
$allvar = $GLOBALS;
//在函數(shù)中不要直拉遍歷$GLOBALS,會(huì)出現(xiàn)堆棧問題
foreach($allvar as $k=>$v){
//變量值相同,可能不是相同變量,因多個(gè)變量的值可能相同
if ($src == $v){
//改變當(dāng)前變量$src的值
$src = 'change';
//如果$GLOBALS[$k]也跟著改變,那就是同一個(gè)變量。
if ($src == $GLOBALS[$k]){
//echo "\$$k name is $k
";
//還原變量值
$src = $save;
return $k;
}
}
}
}
copy下來后發(fā)現(xiàn)這個(gè)怎么測(cè)試結(jié)果有時(shí)候?qū)τ袝r(shí)候不對(duì),想了很久,終于弄明白,雖然很簡(jiǎn)單,但是自己還是記錄下,希望遇到同樣情況的同學(xué)注意。
比如:現(xiàn)在我測(cè)試
復(fù)制代碼 代碼如下:
$test2 = "hello";
$countNum=0;
echo getVarName($test2);
//按道理應(yīng)該輸出為”test2“,但是輸出的是"countNum",
因?yàn)楹瘮?shù)中的
if ($src == $v) 這里存在問題 比如$src="hello", $GLOBALS里面有個(gè)變量$countNUm=0;
這時(shí)在循環(huán)的時(shí)候判斷 if ($src == $v) ,即"hello"==0,比較的結(jié)果為true,類型轉(zhuǎn)換的時(shí)候“hello“轉(zhuǎn)為整形為0,
然后就退出循環(huán)了,得到錯(cuò)誤的結(jié)果。
一個(gè)解決辦法就是 if ($src == $v) 改為 if($src===$v),即恒等。
如果我理解錯(cuò)了歡迎您指正,一起進(jìn)步。
相關(guān)文章
php實(shí)現(xiàn)計(jì)數(shù)器方法小結(jié)
這篇文章主要介紹了php實(shí)現(xiàn)計(jì)數(shù)器方法,總結(jié)了三款非常實(shí)用的計(jì)數(shù)器實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01ThinkPHP連接ORACLE數(shù)據(jù)庫的詳細(xì)教程
ThinkPHP要連接Oracle數(shù)據(jù)庫,必須有兩個(gè)東西,一個(gè)PHP官方寫的擴(kuò)展,一個(gè)Oracle官方寫的客戶端,本文小編給大家詳細(xì)介紹了ThinkPHP連接ORACLE數(shù)據(jù)庫的教程,文中通過圖文結(jié)合的方式講解的非常詳細(xì),需要的朋友可以參考下2023-12-12php引用和拷貝的區(qū)別知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是關(guān)于php引用和拷貝的區(qū)別以及相關(guān)知識(shí)點(diǎn)總結(jié),需要的朋友們學(xué)習(xí)下。2019-09-09PHP 讀取大文件的X行到Y(jié)行內(nèi)容的實(shí)現(xiàn)代碼
需要讀取一個(gè)文件的幾行內(nèi)容,但是文件比較大,所以研究了下php讀取大文件的幾行內(nèi)容的方法,寫了一個(gè)方法,代碼如下2013-06-06php 啟動(dòng)時(shí)報(bào)錯(cuò)的簡(jiǎn)單解決方法
php啟動(dòng)時(shí)報(bào)錯(cuò)的情況,想必很多朋友都有遇到吧,下面為大家介紹下比較不錯(cuò)的解決方法2014-01-01php中通過DirectoryIterator刪除整個(gè)目錄的方法
這篇文章主要介紹了php中通過DirectoryIterator刪除整個(gè)目錄的方法,實(shí)例分析了php通過DirectoryIterator類操作目錄的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03