Hello,在PHP裡,我想獲得某個變數的名字,如
$name = 'xiaomin';echo get_varible_name($name);\\ output 'name'
我在這裡看到一段代碼
function get_variable_name(&$var, $scope = NULL) { if (NULL == $scope) { $scope = $GLOBALS; } $tmp = $var; $var = "tmp_exists_" . mt_rand(); $name = array_search($var, $scope, TRUE); $var = $tmp; return $name;}
其中的$var = "tmp_exists_" . mt_rand();是什麼意思?誰能解釋下
回複內容:
Hello,在PHP裡,我想獲得某個變數的名字,如
$name = 'xiaomin';echo get_varible_name($name);\\ output 'name'
我在這裡看到一段代碼
function get_variable_name(&$var, $scope = NULL) { if (NULL == $scope) { $scope = $GLOBALS; } $tmp = $var; $var = "tmp_exists_" . mt_rand(); $name = array_search($var, $scope, TRUE); $var = $tmp; return $name;}
其中的$var = "tmp_exists_" . mt_rand();是什麼意思?誰能解釋下
題主仔細讀鳥哥的原文就會發現這句話:
顯然, 我們需要根據變數的值去查詢這個表, 找到值等於要找值的變數, 但是, 這樣做又有一個問題, 那就是, 可能會有多個變數的值相等啊?
我們測試一下:
1.注釋掉題主疑惑的那句話:
$test1 = 123;$test2 = 123;function get_variable_name(&$var, $scope = NULL) { if (NULL == $scope) { $scope = $GLOBALS; } $tmp = $var; $var = "tmp_exists_" . mt_rand(); // $name = array_search($var, $scope, TRUE); $var = $tmp; return $name;}echo get_variable_name($test1)."\n";echo get_variable_name($test2);
我們看下輸出:
//無法區分
2.現在我們取消注釋:
$test1 = 123;$test2 = 123;function get_variable_name(&$var, $scope = NULL) { if (NULL == $scope) { $scope = $GLOBALS; } $tmp = $var; $var = "tmp_exists_" . mt_rand(); $name = array_search($var, $scope, TRUE); $var = $tmp; return $name;}echo get_variable_name($test1)."\n";echo get_variable_name($test2);
輸出如下:
//區分成功
首先回答題主的問題,目的是修改需要尋找變數的值使其在全域變數中唯一。然後說下我對這個函數的理解:
這個函數有幾處地方需要注意的:
- 首先是參數
&$var,這裡用了引用,需要注意一下,作用在後頭會說。
- 然後是使用了
$GLOBALS超全域變數
- 就是題主說的更改了
$var變數的值
$GLOBALS超全域變數是一個數組,負責儲存頁面上所有的變數的,這個函數的意思是通過使用array_search()函數在這個全域變數數組中搜尋這個變數值,如果存在的話則返回其鍵名。為了防止有重複的值出現,函數則使用了 mt_rand() 函數更改了 $var 的值為一個唯一隨機變數並在查詢結束之後重新把原值賦上,如果沒有這句話的話在有變數存在相同值的情況下就無法分辨。
傳進來的第一個參數是指向某變數的引用,這樣可以在方法內部操作外面傳進來的變數。
緊接著開始操作, 給外面的變數,先賦值一個隨機、又不重複的臨時值,方便在範圍(預設 GLOBAL)裡按照值去尋找。
找到之後,再把這個變數的值賦回去。
方法的關鍵是 array_search 的用法, 以值去搜尋(所以要給個不可能重複的值),搜到後返回鍵名(GLOBAL 範圍下的變數, 都存在於 $GLOBAL[$key] = $value 這個數組裡)。
函數利用了PHP的變數的變數這個概念.