PHP獲得某個變數的名字,代碼解釋

來源:互聯網
上載者:User
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);

輸出如下:

//區分成功

首先回答題主的問題,目的是修改需要尋找變數的值使其在全域變數中唯一。然後說下我對這個函數的理解:

這個函數有幾處地方需要注意的:

  1. 首先是參數&$var,這裡用了引用,需要注意一下,作用在後頭會說。
  2. 然後是使用了$GLOBALS超全域變數
  3. 就是題主說的更改了$var變數的值

$GLOBALS超全域變數是一個數組,負責儲存頁面上所有的變數的,這個函數的意思是通過使用array_search()函數在這個全域變數數組中搜尋這個變數值,如果存在的話則返回其鍵名。為了防止有重複的值出現,函數則使用了 mt_rand() 函數更改了 $var 的值為一個唯一隨機變數並在查詢結束之後重新把原值賦上,如果沒有這句話的話在有變數存在相同值的情況下就無法分辨。

傳進來的第一個參數是指向某變數的引用,這樣可以在方法內部操作外面傳進來的變數。

緊接著開始操作, 給外面的變數,先賦值一個隨機、又不重複的臨時值,方便在範圍(預設 GLOBAL)裡按照值去尋找。

找到之後,再把這個變數的值賦回去。

方法的關鍵是 array_search 的用法, 以值去搜尋(所以要給個不可能重複的值),搜到後返回鍵名(GLOBAL 範圍下的變數, 都存在於 $GLOBAL[$key] = $value 這個數組裡)。

函數利用了PHP的變數的變數這個概念.

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.