PHP - 如何获取变量的名称?

时间:2013-04-10 20:17:44

标签: php variables namespaces

我想为调试目的制作一个小函数,以人类可读的格式打印变量的内容。

该函数基于CakePHP框架中的pr()快捷方式,即this one

到目前为止,我有这个:

function pr($var,$msg){
    $pr_debug=true;
    if($pr_debug){
        echo "<pre>";
        if($msg) echo "<b>".$msg.": </b>";
        if(gettype($var)=="array" || gettype($var)=="object" ) echo "<br>";
        print_r($var);
        echo "</pre>";
    }
}

在变量内容之前打印可选消息($ msg)。

但我要添加的是,如果没有发送消息,还要将变量的NAME打印为这样的消息,那么我可以得到这样的内容:

$myvar="hello";
pr($myvar); 

//应输出:

myvar: hello

所以在我的函数中,如何将变量的名称作为字符串获取,以便输出? 即pr($foo);我需要"foo"$name="biz"; pr($$name);我需要"biz", 等等...

我希望尽管PHP全局配置或其他任何东西都可以使用(我不太了解这种方式,所以对GLOBALS的任何帮助都会非常感激)。

谢谢!

额外:在stackoverflow,我如何格式化源代码以获得PHP格式和颜色?截至目前,我简单地使用了textarea中的工具栏并选择了“代码示例”......

1 个答案:

答案 0 :(得分:0)

你想要的是变量变量......但实际上,你不需要它们。在现代编程中,它们几乎与“goto”一样糟糕:

$foo = 'bar';
$baz = 'foo';
echo $$baz;   // bar
     ^^-- note the doubled $'s

问题是,当你到达调试代码时,可变名称的“来源”已经丢失,例如。

function debug($out) {
   global $$out;
   echo $out, ': ', $$out;
}

$foo = 'bar';
debug($foo);

这不会输出“foo”作为名称,因为名称'$ foo'没有传入函数。只有$foo的{​​{1}}的值才会进入。