0

我有以下功能:

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 很长,字符串在第 717 行的 /mypath/ 中给出 ---> foreach((array)debug_backtrace($Object) as $aVal)

是什么导致了错误?我该如何解决?

4

2 回答 2

1

的第一个参数debug_backtrace()是选项的位掩码(即 a 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;
}
于 2014-03-04T19:15:41.133 回答
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;
}
于 2014-03-04T19:17:46.980 回答