我有以下功能:
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)
导致错误的原因是什么?我该如何解决?
答案 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;
}