回答
這似乎並不可能輕易。
您可以使用reflection來確定parameters of the function,但它會返回函數期望的變量名稱,如果您已經在函數中,那麼您已經知道這些變量名稱。
debug_backtrace
是什麼叫你偷看的常用方法,但它返回的值傳遞的參數,而不是進行調用時使用呼叫者的變量名稱或常量。
然而,它確實給你的是文件名和調用者的行號,所以你可以打開文件,並尋求到該行並解析出來,但是這將是很無聊,你不應該這樣做。我不會給你這個例子的代碼,因爲它非常愚蠢,你不應該考慮這樣做有史以來。
get_defined_vars
事情是一個黑客,並不能保證工作,並且肯定不會用於常量,因爲get_defined_constants
這樣做。
好吧,我放棄這個想法:) – 2011-04-09 04:18:34
你叫我完全傻。那麼,事實是,我在一個很酷的函數中做這個事情,我總是使用對象檢查。這不是生產環境,我承認它,但讓我告訴你這對於調試非常方便。 – 2011-07-27 05:36:58
試試這個:
<?php
function getVarConst($var)
{
if (isset($GLOBALS[$var]) // check if there is a variable by the name of $var
{
return $GLOBALS[$var]; // return the variable, as it exists
}
else if (defined($var)) // the variable didn't exist, check if there's a constant called $var
{
return constant($var); // return the constant, as it exists
}
else
{
return false; // return false, as neither a constant nor a variable by the name of $var exists
}
}
?>
它不適用於const,請嘗試'define('CONST_A','test'); echo getVarConst(CONST_A);' – 2011-04-09 04:05:12
這些名稱必須作爲字符串傳遞。如果您將它們作爲變量或常量傳遞,則函數會接收常量/變量的值。據我所知,除非循環遍歷$ GLOBALS和get_defined_constants()來查找值,否則從它的值中獲取常量或變量的名稱是不可能的,而且這很愚蠢 - PHP將在每個請求(也解析,如果你不使用操作碼緩存)。它會讓你的應用/腳本執行得如此糟糕,這不值得。 – ShotgunToothpaste 2011-04-09 04:09:50
說實話,你不應該需要這個代碼,除非你的應用程序需要能夠獲取設置的值,而不管用戶是將它定義爲常量還是變量。 例如你可以使用它來完成這個工作,所以'$ db ='myDb';'或'define('db','myDb');'都可以使用,你可以通過'getVarConst('db ');'所以你得到可用的值,變量優先於常量。 – ShotgunToothpaste 2011-04-09 04:11:40
這是不可能的。
你真的想要以下權利?
define('CONST_A', 'THIS COULD BE ANYTHING');
$name = 'who cares';
func(CONST_A); //returns 'CONST_A'
func($name); //returns '$name'
函數不能知道這個。
我想,像查爾斯描述的閱讀源代碼可以讓你這個,但爲什麼?
即使這樣,它可能也無法解決諸如'$ name = myFunc('hiThere');'之類的問題而不執行該文件。 換句話說,OP的問題幾乎是不可能的,絕對不可行,因爲性能受到影響,並且無法通過一些小的重構來解決......好的計劃應用程序絕不需要這種類型的東西。 – ShotgunToothpaste 2011-04-09 08:36:02
- 1. PHP - 如何獲取變量的名稱?
- 2. 在PHP中獲取變量名稱
- 3. 如何在PHP中獲取變量名?
- 4. 以編程方式列出類中的成員變量名稱
- 5. 以Turbo Pascal方式獲取PHP變量
- 6. 如何獲取常量的名稱?
- 7. JavaScript:如何獲取常量的名稱?
- 8. 如何獲取常量的名稱?
- 9. 如何以編程方式獲取應用程序的名稱?
- 10. PHP:用變量名稱回顯常量
- 11. PHP:如何在php post方法中獲取所有變量名稱
- 12. 以編程方式獲取case語句中常量的值
- 13. 以編程方式引用升序變量名稱(var1,var2,...)
- 14. 如何在PHP中使用變量名稱回顯常量變量
- 15. js獲取php動態名稱變量
- 16. 如何獲取環境變量名稱
- 17. 如何獲取變量的名稱?
- 18. 如何獲取變量的名稱?
- 19. 如何獲取變量的名稱?
- 20. 獲取GET方法變量的名稱
- 21. 如何在Android中以編程方式獲取PATH環境變量的值?
- 22. Android:以編程方式獲取可繪製的名稱 - 名稱
- 23. 以編程方式編輯NSLayoutConstraint常量?
- 24. JS:獲取變量名稱
- 25. Ruby:獲取變量名稱
- 26. 獲取變量的名稱
- 27. 獲取包中聲明的所有變量和常量名稱
- 28. 如何以編程方式獲取會話cookie名稱?
- 29. 如何以編程方式獲取Gradle模塊名稱
- 30. 如何以編程方式獲取應用組名稱?
[如何在PHP中獲取變量名稱作爲字符串?](http://stackoverflow.com/questions/255312/how-to-get-a-variable-name-as-a-string -in-php) – 2011-04-09 03:39:12
@Marc,它適用於變量,但不適用於CONSTANTS ... – 2011-04-09 03:44:45
設置另一個函數並處理從'get_defined_constants()'返回的數據。據我所知,函數沒有辦法告訴它的參數是來自變量還是常量。它只能看到var/constant的內容,而不是來源。你必須設置兩個功能,兩個做你想做的事。一個是vars,一個是consts。 – 2011-04-09 03:48:13