简化调试

时间:2012-03-18 23:09:50

标签: php

有没有办法实现以下目标?

$myvar = 'x';
debug($myvar); 

// outputs the following 
// myvar value is x

显然,为此,调试函数需要能够获取传递给它的变量名。

那是否有神奇的常数? 如果没有,请推荐可以简化调试的替代方法。

当然,我知道将变量名称作为单独的参数传递的选项

 debug('myvar',$myvar);

但我的目标是完全避免这样做。

4 个答案:

答案 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 Consolephp library允许:

  • 查看错误& Chrome JavaScript控制台&中的例外情况在通知弹出窗口中。
  • 转储任何类型变量。
  • 远程执行PHP代码。
  • 通过密码保护访问权。
  • 按请求分组控制台日志。
  • 跳转到错误文件:文本编辑器中的行。
  • 将错误/调试数据复制到剪贴板(对于测试人员)。

推荐所有人!

答案 2 :(得分:0)

var_dump($my_var);

答案 3 :(得分:0)

这被称为print debugging,并且至少有四个原因被认为是一种非常低效的方式:您浪费时间添加然后删除调试代码,调试代码会减慢您的网络速度,而不仅仅是您的流程重新调试,你可以忘记在调试完成后删除代码,找到并分析结果需要时间 - 你可以在服务器上的连续日志中看到它们。 更好的方法是安装特殊的调试器扩展,并使用来自IDE的like PHPEd

的IDE代码。