所以,我需要全局空間中的實際變量名稱「varName」。這個函數實際上是一個類中的一個方法。如何獲取變量的名稱?
代碼是用任意簡單
$varName = 'what ever';
public function save($var)
{
$i[varName goes here] = $var;
}
我不知道這甚至有可能,但我認爲也許有回調?
所以,我需要全局空間中的實際變量名稱「varName」。這個函數實際上是一個類中的一個方法。如何獲取變量的名稱?
代碼是用任意簡單
$varName = 'what ever';
public function save($var)
{
$i[varName goes here] = $var;
}
我不知道這甚至有可能,但我認爲也許有回調?
如果它是一個全局變量,你也許可以找出與原名稱:
$varname = array_search($var, $GLOBALS);
但是,這並不過分可靠;一個最好的猜測。如果兩個全局變量包含相同的值,那麼您只會收到其中任何一個的名稱。
這個解決方案是我想到的唯一的解決方案。仍然有一些解決方案可以解決多個結果的問題,我相信 - 您可以執行我在答案中描述的內容。雖然我不知道,如果它會工作... – Tadeck 2011-05-31 00:21:25
作品:'<?php $ varName ='what ever'; 函數保存($ var) $ {[array_search($ var,$ GLOBALS)] = $ var; print_r($ i); } save($ varName); ?>' – RoboTamer 2011-05-31 00:23:57
@Tadeck:如果您想查找多個匹配鍵,那麼'array_intersect($ GLOBALS,array($ var))'同樣簡單。 – mario 2011-05-31 00:25:21
閱讀關於$GLOBALS
變量in the documentation。
這可能是你需要的。根據您確定需要哪種變量的方式,例如,您可以使用用戶array_search()
根據該值查找適當的名稱。
注意:$GLOBALS
是關於全局作用域的變量。
編輯:
但是這將是一個仍然猜測。您可以嘗試使用以下方法確定傳遞變量的名稱,並確保其具有〜100%的確定性:
array_search()
找到變量的名稱。如果只有一個鍵匹配它,你就得到你的名字。如果不是,請繼續下一步。但是......
是否真的需要?我建議你應該尋找更簡單的解決方案,更好地封裝你的代碼。
Ps。 array_search()
實際返回不超過一個鍵(see documentation)。您應該知道這一點,並搜索多個結果,使其更復雜一些,以便在多個變量符合搜索條件時不跳過正確的結果。 (編輯2:正如馬里奧建議,array_intersect($GLOBALS, array($var))
就足夠了)
在C,你會使用一個宏。我不認爲在PHP中有相當於。
您可以將變量的名稱作爲字符串傳遞給該函數,然後在該函數中從GLOBALS獲取變量的值或eval it。
感謝您的解決方案! 這裏是我的測試:
<?php
$varName = 'what ever';
function save($var)
{
$i[array_search($var, $GLOBALS)] = $var;
print_r($i);
}
save($varName);
?>
打印:
Array
(
[varName] => what ever
)
我想你應該改變一下代碼,導致其上,你會通過什麼非常令人迷惑,什麼/在那裏你將存儲。 – 2011-05-31 00:11:29
可能的重複http://stackoverflow.com/questions/255312/how-to-get-a-variable-name-as-a-string-in-php – 2011-05-31 00:11:31