-2

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

该功能基于 CakePHP 框架中的快捷方式pr(),即:

到目前为止我有这个:

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)。

但我要补充的是,如果没有发送消息,也可以打印变量的名称作为这样的消息,所以我可以得到这样的东西:

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

//应该输出:

myvar: hello

那么在我的函数中,我怎样才能将变量的名称作为字符串来输出呢?即pr($foo);我需要"foo"$name="biz"; pr($$name);我需要"biz", 等等......

最好我想要一些尽管 PHP 全局配置或其中任何一个都可以工作的东西(顺便说一下,我不太了解,所以对 GLOBALS 的任何帮助将不胜感激)。

谢谢!

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

4

1 回答 1

-1

你想要的是可变变量......但事实上,你不想要它们。它们几乎和现代编程中的“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”没有传递给函数。只有 的 VALUE$foo进入bar

于 2013-04-10T20:20:03.620 回答