laurent laville version

  1. <?php
  2. if (!function_exists('debug_print_backtrace')) {
  3.     function debug_print_backtrace()
  4.     {
  5.         // Get backtrace
  6.         $backtrace = debug_backtrace();
  7.  
  8.         // Unset call to debug_print_backtrace
  9.         array_shift($backtrace);
  10.  
  11.         // Iterate backtrace
  12.         $calls = array();
  13.         foreach ($backtrace as $i => $call) {
  14.             if (!isset($call['file'])) {
  15.                 $call['file'] = '(null)';
  16.             }
  17.             if (!isset($call['line'])) {
  18.                 $call['line'] = '0';
  19.             }
  20.             $location = $call['file'] . ':' . $call['line'];
  21.             $function = (isset($call['class'])) ?
  22.                 $call['class'] . '.' . $call['function'] :
  23.                 $call['function'];
  24.  
  25.             $params = '';
  26.             if (isset($call['args'])) {
  27.                 $args = array();
  28.                 foreach ($call['args'] as $arg) {
  29.                     if (is_array($arg)) {
  30.                         $args[] = print_r($arg, true);
  31.                     } elseif (is_object($arg)) {
  32.                         $args[] = get_class($arg);
  33.                     } else {
  34.                         $args[] = $arg;
  35.                     }
  36.                 }
  37.                 $params = implode(', ', $args);
  38.             }
  39.  
  40.             $calls[] = sprintf('#%d  %s(%s) called at [%s]',
  41.                 $i,
  42.                 $function,
  43.                 $params,
  44.                 $location);
  45.         }
  46.  
  47.         echo implode("\n", $calls);
  48.     }
  49. }
  50. ?>