如何在PHP中以编程方式获取变量/ const名称?

时间:2011-04-09 03:33:06

标签: php

func(CONST_A)应该返回'CONST_A'func($name)应该返回$name

如何在PHP中实现此func

3 个答案:

答案 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描述的源代码可以解决这个问题,但为什么呢?