Most of the time, when working on some piece of code, I'll resort to the configured debugger in my current Zend Studio configuration. And you probably do too :-)
However, I often have to access debug-type information on live sites where installing a debugger is out of the question, and I find myself often resorting to parameter dumps like the following:
<?php// lazy version for simple casesfunction foo_bar($x, $y, $z) { dsm(func_get_args()); // [...]// less lazy version for more hairy casesfunction foo_baz($x, $y, $z) { dsm(array('in foo_baz, x' => $x, 'y' => $y, 'z' => $z)); // ...?>
You've probably being using it too and, of course, after the first few dozen times, it becomes a bit used. So here's a tiny snippet that makes such dumps simpler to type and use :
<?phpfunction foo_quux($x, $y, $z) { dsm(func_get_args_hash()); // [...]/** * Provide a better func_get_args() * * @return array * Hash of parameters, keyed by parameter name */function func_get_args_hash() { $stack = debug_backtrace(); $stack = $stack[1]; $rf = new ReflectionFunction($stack['function']); $params = $rf->getParameters(); $ret = array(); foreach ($params as $index => $param) { $ret[$param->name] = $stack['args'][$index]; } return $ret;}?>
Knowing next to nothing about
Knowing next to nothing about reflection, I can't see what makes this better than vanila dsm() or dpm(). What does the output look like?
Parameter names and default values
When using
dsm(func_get_args_hash())
instead ofdsm(func_get_args())
, you get:dsm(func_get_args())
.When you're bug-hunting, it's often useful (to me at least) to know which parameter is being represented by a value in the args dump, and which values all the parameters have, default or explicit.
Sample use on
_locale_import_one_string_db()
below.