有没有办法实现以下目标?
$myvar = 'x';
debug($myvar);
// outputs the following
// myvar value is x
显然,为此,调试函数需要能够获取传递给它的变量名。
那是否有神奇的常数? 如果没有,请推荐可以简化调试的替代方法。
当然,我知道将变量名称作为单独的参数传递的选项
debug('myvar',$myvar);
但我的目标是完全避免这样做。
答案 0 :(得分:2)
是的,有,但您需要传递名称:
function debug($var_name) {
printf('%s value is %s', $var_name, var_export($GLOBALS[$var_name], true));
}
或者,如果您只想要没有可解析格式的值:
function debug($var_name) {
printf('%s value is %s', $var_name, $GLOBALS[$var_name]);
}
注意:这仅适用于全局范围内的变量。要对本地范围执行相同操作,您可能需要使用get_defined_vars()
的解决方案,如下所示:
printf('%s value is %s', $var_name, get_defined_vars()[$var_name]);
这不能简单地包含在debug()
函数中。这是因为get_defined_vars()
返回表示调用get_defined_vars()
的范围内的变量的数组,我们不需要定义debug()
的范围,不是吗?
统一解决方案可以使用全局范围作为默认值,但也接受一些表示本地范围的数组,因此定义可以是:
function debug($var_name, $scope_vars=null) {
if ($scope_vars === null) {
$scope_vars = $GLOBALS;
};
printf('%s value is %s', $var_name, var_export($scope_vars[$var_name], true));
}
然后你可以像在全球范围内那样调用它:
debug('myvar');
或类似于本地范围,传递本地范围数组:
debug('myvar', get_defined_vars());
有关工作示例,请参阅此演示:http://ideone.com/NOtn6
有帮助吗?
答案 1 :(得分:1)
还有一个很棒的Google Chrome扩展程序PHP Console,php library允许:
推荐所有人!
答案 2 :(得分:0)
var_dump($my_var);
答案 3 :(得分:0)
这被称为print debugging,并且至少有四个原因被认为是一种非常低效的方式:您浪费时间添加然后删除调试代码,调试代码会减慢您的网络速度,而不仅仅是您的流程重新调试,你可以忘记在调试完成后删除代码,找到并分析结果需要时间 - 你可以在服务器上的连续日志中看到它们。 更好的方法是安装特殊的调试器扩展,并使用来自IDE的like PHPEd
的IDE代码。