У меня есть следующий код для возврата ошибки …. но его
$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";
Я действительно хочу преобразовать этот массив в строку. Есть ли какой-либо метод или функция, которая может конвертироваться без уведомления …
Как это исправить?
вы начинаете с:
foreach($traces as $k=>$v) <- $traces here is an array
то вы пытаетесь сделать
$traces.= "xxx" <- $traces here is handled as a string
я бы скорее определил строку $ tracestr для агрегирования текстового содержимого.
Вы не создаете массив правильно
$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 }
$trace = debug_backtrace(); foreach($traces as ...)
Здесь что-то не так. $ trace – массив Debug Backtrace. Пока вы используете foreach ($ traces) … который кажется неопределенным. И вы добавляете к $ traces, который, как предполагается, является нескалярным, чтобы его отобразить.
Просто назовите свои переменные правильно и сделайте имена разными!