Pragmatism in the real world

Runtime Variable Inspection

The most common way to debug is to stick echo statements into your code at strategic places. If you are feeling clever, you might even output a variable’s value too:

echo "<p>here: $myvar = $myvar";</p>

I call this runtime variable inspection and as PHP is a script language, it’s a very fast way to debug a script. You stick the echo statement at strategic points and with a few page refreshes in the browser, you have the troublesome bit of code nailed.

However echo $var doesn’t really cut it for variables or objects (or booleans for that matter). To this end I wrote myself a function called DBG() to print out a variety of variables sensibly.

The code looks like this:

function DBG($var, $title='', $echo_to_screen = true)
{
  if($title)
    $titleText = "Debug display of '$title':";
  else
    $titleText = "Debug: ";

  ob_start();
  echo "<p><b>$titleText</b><pre>n";
  if(is_array($var))
  {
    echo "Number of elements: " . count($var) . "n";
    print_r($var);
  }
  elseif(is_object($var))
  {
    print_r($var);
  }
  elseif(is_string($var))
  {
    print_r(htmlentities(str_replace("t",'  ',$var)));
  }
  elseif(is_bool($var))
  {
    echo $var === true ? 'true' : 'false';
  }
  else
  {
    print_r($var);
  }

  echo "</pre></p>n";
  $output = ob_get_contents();
  ob_end_clean();

  if($echo_to_screen)
  {
    echo $output;
  }

  return $output;
}

It works wonders for fixing nearly all the bugs I have to deal with. Anything more complicated usually means that I break out the proper debugger in Zend Studio (wish they had a Firefox toolbar!)