O'Reilly logo

Upgrading to PHP 5 by Adam Trachtenberg

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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.", ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required