2010-03-05 100 views
4

func($name1)應該返回name1如何在PHP中獲取變量名?

這可能嗎?

+0

在TCL中,您可以輕鬆完成此操作。 – 2010-03-05 06:01:52

+1

首先,你爲什麼要這樣做?請給用例。我無法完全獲得上下文。 – coder 2010-03-05 06:03:06

+0

你能嗎?是。你應該?絕對不。 – 2010-03-05 06:52:30

回答

7

這是一個功能。

function var_name (&$iVar, &$aDefinedVars) 
{ 
    foreach ($aDefinedVars as $k=>$v) 
     $aDefinedVars_0[$k] = $v; 

    $iVarSave = $iVar; 
    $iVar  =!$iVar; 

    $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars)); 
    $iVar  = $iVarSave; 

    return $aDiffKeys[0]; 
} 

這樣稱呼它

$test = "blah"; 
echo var_name($test, get_defined_vars()); 

,將打印出來的 「測試」。

我最初發現函數over here您也可以通過迭代get_defined_vars()返回的數組來完成此操作。這可能會更容易理解。

+2

我在CodePad中試過這個(http://codepad.org/w11zjYUv),它工作。人們應該投票回答這個問題。我想知道爲什麼其他答案用一個簡單的「不」更多的票比這個更... – 2010-03-05 06:21:15

+1

人們應該想到這個代碼的必要性。 想想如果你需要一個密鑰的名稱使用數組 但留下可變的摘要。 – 2010-03-05 06:37:22

+2

「否」擁有更多選票,因爲鍵入「否」所需的時間比測試和描述解決方案所需的時間更短。其他人在進入「否」之後進入,但在答案出來之前進入「否」,因爲他們不知道如何,所以認爲這是不可能的。它會自己有希望:) – andyjdavis 2010-03-05 06:42:40

2

+0

是否有驗證回覆太短? – ack 2010-03-05 06:10:27

+0

但它並不太短。如果太短,我會如何發佈它? :P – 2010-03-05 06:11:52

+0

ahahaha,有很多空白......看不到它? 我認爲SO需要修改意見和答案,因爲這一點.... – ultrajohn 2010-03-05 06:18:09

3

沒有,有沒有辦法讓PHP變量的名稱。

當調用函數時,該函數將只接收變量的內容,而不是「變量本身」 - 這意味着函數無法找到傳遞給它的變量的名稱。

+0

我喜歡我的答案更好.... – 2010-03-05 05:59:33

+0

我的回答給出了更多的信息:-p – 2010-03-05 06:00:00

+0

*「有力的寫作很簡潔,一個句子不應該包含不必要的單詞,一個段落不應該有不必要的句子,這是因爲一個繪圖不應該有不必要的線條和一個機器沒有不必要的部分。不要求作者把所有的句子縮短,或者避免所有的細節,只在大綱中對待他的主題,但是每個單詞都要講。「 - S&W * – 2010-03-05 06:00:59

1

當你定義一個函數號,您可以指定一個局部變量的名稱爲它具有該功能的範圍內。 PHP會傳遞函數適當的值,但符號不再在範圍內。

但是,您可以使用「variable variables」作爲替代方案。

2

好主意?沒有

任何用例你在哪裏你應該做到了嗎?否

概念驗證?當然!

<?php 

a($test); 


function a($x) { 
    $trace = debug_backtrace(); 
    $file = file($trace[0]['file']); 
    $line = $file[$trace[0]['line']-1]; 

    var_dump($line); // Prints "a($test);" Do the Stringparsing and your done 

} 

是的,這需要「易」通過讀取的資源文件,它也是用PHP擴展名爲「bytekit」,讓您從有到PHP操作碼的userland訪問和工作是可行的。