Debugging Functions

Debugging is the bane of every programmer. When you’re trying to untangle why a variable isn’t set correctly inside a function—which was itself called from another function, which was included from an include file, which was wrapped inside a class—it can be maddening to track down where in the chain of events everything started to go wrong.

PHP 5 includes a set of functions that ease your pain. The debug_backtrace( ) and debug_print_backtrace( ) functions return and print, respectively, an assortment of information about the current function and every previous function in the call stack.

Integrating Debugging into Your Code

One good strategy for deploying debug_print_backtrace( ) is to define( ) a DEBUG constant whose value determines whether your code should run in debugging mode. Example 7-9 is a modified version of Example 7-8 with integrated debugging scaffolding.

Example 7-9. Integrating backtrace debugging

// Enable debug mode; // Can be placed in a file that's added using the // auto_prepend_file configuration directive define('DEBUG', true); class duplicateUsernameException extends Exception { }; // Add user to database, throw exception if duplicate entry function addUser($db, $user) { $db->query("INSERT INTO users VALUES ('${user[0]}', '${user[1]}');"); // Error code 19 means INSERT violates UNIQUEness constraint // Throw duplicateUsernameException if ($db->lastError( ) = = 19) { throw new duplicateUsernameException( "${user[0]} already in database.", ...

Get Upgrading to PHP 5 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.