我有以下代码来回溯错误....但是
$traces = debug_backtrace();
foreach ($traces as $k => $v)
{
if ($v['function'] == 'include'
|| $v['function'] == 'include_once'
|| $v['function'] == 'require_once'
|| $v['function'] == 'require')
{
$args = '';
if (isset($v['args']) && is_array($v['args']))
{
$size = count($v['args']);
foreach ($v['args'] as $key => $arg)
{
$args .= $v['args'][$key];
if($key < $size)
{
$args .= ', ';
}
}
}
$traces .= '#' . $k . ' '
. $v['function']
. '('.$args.') called at ['
. $v['file'].':'.$v['line'].']';
}
else
{
$function = (array_key_exists('function',$v)) ?
$v['function'].'() ' : 'function_name';
$file = (array_key_exists('file',$v)) ?
$v['file'] : 'file_name';
$line = (array_key_exists('line',$v)) ?
$v['line'] : 'line';
$traces .= "#{$k} $function called at {$file}:{$line}\n";//This line giving me notice...
}
}
我注意到数组转换为字符串:
$traces .= "#$k $function called at $file:$line\n";
我实际上想将此数组转换为字符串。是否有任何方法或功能可以在不给我任何通知的情况下进行转换......
我该如何纠正?
答案 0 :(得分:1)
你从:
开始foreach($traces as $k=>$v) <- $traces here is an array
然后你尝试做
$traces.= "xxx" <- $traces here is handled as a string
我宁愿定义一个$ tracestr字符串来聚合文本内容。
答案 1 :(得分:0)
您没有正确创建阵列
$args .= $v['args'][$key];
您正在创建一个字符串。
$args = array();
if(isset($v['args']) && is_array($v['args']))
{
$size = count($v['args']);
foreach ($v['
args'] as $key => $arg)
{
array_push($args,$v['args'][$key]);
// some of your code
}
答案 2 :(得分:0)
$trace = debug_backtrace();
foreach($traces as ...)
这里出了点问题。 $ trace 是一个Debug Backtrace数组。当你 foreach($ trace) ......这似乎是未定义的。然后你附加到 $ traces ,它应该是一个非标量来预测它。
只需正确命名变量并使名称不同!