2011-05-31 144 views
1

所以,我需要全局空間中的實際變量名稱「varName」。這個函數實際上是一個類中的一個方法。如何獲取變量的名稱?

代碼是用任意簡單

$varName = 'what ever'; 

public function save($var) 
{ 
    $i[varName goes here] = $var; 
} 

我不知道這甚至有可能,但我認爲也許有回調?

+0

我想你應該改變一下代碼,導致其上,你會通過什麼非常令人迷惑,什麼/在那裏你將存儲。 – 2011-05-31 00:11:29

+0

可能的重複http://stackoverflow.com/questions/255312/how-to-get-a-variable-name-as-a-string-in-php – 2011-05-31 00:11:31

回答

1

如果它是一個全局變量,你也許可以找出與原名稱:

$varname = array_search($var, $GLOBALS); 

但是,這並不過分可靠;一個最好的猜測。如果兩個全局變量包含相同的值,那麼您只會收到其中任何一個的名稱。

+0

這個解決方案是我想到的唯一的解決方案。仍然有一些解決方案可以解決多個結果的問題,我相信 - 您可以執行我在答案中描述的內容。雖然我不知道,如果它會工作... – Tadeck 2011-05-31 00:21:25

+0

作品:'<?php $ varName ='what ever'; 函數保存($ var) $ {[array_search($ var,$ GLOBALS)] = $ var; print_r($ i); } save($ varName); ?>' – RoboTamer 2011-05-31 00:23:57

+1

@Tadeck:如果您想查找多個匹配鍵,那麼'array_intersect($ GLOBALS,array($ var))'同樣簡單。 – mario 2011-05-31 00:25:21

1

閱讀關於$GLOBALS變量in the documentation

這可能是你需要的。根據您確定需要哪種變量的方式,例如,您可以使用用戶array_search()根據該值查找適當的名稱。

注意:$GLOBALS是關於全局作用域的變量。

編輯:

但是這將是一個仍然猜測。您可以嘗試使用以下方法確定傳遞變量的名稱,並確保其具有〜100%的確定性:

  1. 將變量傳遞給參考方法。使用array_search()找到變量的名稱。如果只有一個鍵匹配它,你就得到你的名字。如果不是,請繼續下一步。
  2. 保存變量的初始值並保存找到匹配元素的位置列表。
  3. 將變量的值更改爲新的值。根據新值執行另一次搜索,並從點號獲取位置列表中的位置。 3.
  4. 在這一點上,你可能已經找到了你正在尋找的變量的名稱。

但是......

是否真的需要?我建議你應該尋找更簡單的解決方案,更好地封裝你的代碼。

Ps。 array_search()實際返回不超過一個鍵(see documentation)。您應該知道這一點,並搜索多個結果,使其更復雜一些,以便在多個變量符合搜索條件時不跳過正確的結果。 (編輯2:正如馬里奧建議,array_intersect($GLOBALS, array($var))就足夠了)

0

在C,你會使用一個宏。我不認爲在PHP中有相當於。

您可以將變量的名稱作爲字符串傳遞給該函數,然後在該函數中從GLOBALS獲取變量的值或eval it。

0

感謝您的解決方案! 這裏是我的測試:

<?php 
$varName = 'what ever'; 

function save($var) 
{ 
    $i[array_search($var, $GLOBALS)] = $var; 
    print_r($i); 
} 
save($varName); 
?> 

打印:

Array 
(
    [varName] => what ever 
)