debug_backtrace - 长参数

时间:2014-03-04 19:10:03

标签: php debug-backtrace

我有以下功能:

function backtrace($Object=false)
{
    $x = 0;
    foreach((array)debug_backtrace($Object) as $aVal)
    {
        $row[$x]['file']     = $aVal['file'];
        $row[$x]['line']     = $aVal['line'];
        $row[$x]['function'] = $aVal['function'];
        $row[$x]['class']    = $aVal['class'];
        $row[$x]['args']     = $aVal['args'];
        ++$x;
    }
    return $row;
}

但是当我使用它时,我收到如下错误:

  

警告:debug_backtrace()期望参数1为long,在/ mypath / 717行中给出的字符串---> foreach((array)debug_backtrace($ Object)as $ aVal)

导致错误的原因是什么?我该如何解决?

2 个答案:

答案 0 :(得分:1)

debug_backtrace()的第一个参数是选项的位掩码(即long)。在5.3.6之前的PHP版本中,它是一个简单的布尔true / false

要修复它,要么不传入您当前正在传递的$Object变量将其更新为您要使用的受支持选项的任意组合

示例:

$Object = DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT;

如果您想为当前代码块添加一个前提条件,如果$Object无效,则会设置默认值,您可以尝试以下方法:

function backtrace($Object = false) {
    if (!is_long($Object) || (!($Object & DEBUG_BACKTRACE_PROVIDE_OBJECT) && !($Object & DEBUG_BACKTRACE_IGNORE_ARGS))) {
        $Object = 0;
    }

    $x = 0;
    foreach((array)debug_backtrace($Object) as $aVal) {
        $row[$x]['file']     = $aVal['file'];
        $row[$x]['line']     = $aVal['line'];
        $row[$x]['function'] = $aVal['function'];
        $row[$x]['class']    = $aVal['class'];
        $row[$x]['args']     = $aVal['args'];
        ++$x;
    }
    return $row;
}

答案 1 :(得分:0)

对于php> = 5.3.6,您应该使用位掩码选项

function backtrace($Object=false) {
    $x = 0;
    foreach((array)debug_backtrace($Object ? DEBUG_BACKTRACE_PROVIDE_OBJECT : 0) as $aVal)
    {
        $row[$x]['file']     = $aVal['file'];
        $row[$x]['line']     = $aVal['line'];
        $row[$x]['function'] = $aVal['function'];
        $row[$x]['class']    = $aVal['class'];
        $row[$x]['args']     = $aVal['args'];
        ++$x;
    }
    return $row;
}