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 cases
function foo_bar($x, $y, $z) {
dsm(func_get_args());
// [...]
// less lazy version for more hairy cases
function 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 :
<?php
function 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.