func(CONST_A)
应该返回'CONST_A'
,func($name)
应该返回$name
如何在PHP中实现此func
?
答案 0 :(得分:0)
试试这个:
<?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
}
}
?>
答案 1 :(得分:0)
这似乎不太容易。
您可以使用reflection来确定parameters of the function,但会返回函数所需的变量名称,如果您已经在函数内部,那么您已经知道了这些。
debug_backtrace
是窥视你的常用方法,但它返回传递的参数的值,而不是调用者在进行调用时使用的变量名或常量
然而,它所做的给你的是调用者的文件名和行号,所以你可以打开文件并寻找那一行并解析它out,但那将是非常愚蠢的,你不应该这样做。我不打算给你这个代码示例,因为它非常愚蠢,你不应该考虑曾经。
get_defined_vars
这个东西是黑客攻击,也不保证能够正常工作,绝对不会对常量起作用,因为get_defined_constants
会这样做。
答案 2 :(得分:0)
这是不可能的。
你真的想要以下内容吗?
define('CONST_A', 'THIS COULD BE ANYTHING');
$name = 'who cares';
func(CONST_A); //returns 'CONST_A'
func($name); //returns '$name'
该功能无法知道。
我认为阅读像Charles描述的源代码可以解决这个问题,但为什么呢?