我想为调试目的制作一个小函数,以人类可读的格式打印变量的内容。
该函数基于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中的工具栏并选择了“代码示例”......
答案 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}}的值才会进入。