Пользу от этой функции можно реально почувствовать, лишь поработав с ней некоторое время. Вероятно, потом вы не сможете понять, как раньше без нее обходились…
Функция выводит содержимое любой, сколь угодно сложной переменной, будь то массив, объект или простая переменная. Как уже говорилось, приведенная функция исключительно полезна при отладке сценариев.
В отладочных целях часто бывает нужно посмотреть, что содержит та или иная переменная. Однако если эта переменная — массив, да еще многомерный, то с выводом ее содержимого на экран могут возникнуть проблемы.
Мы уже использовали выше две встроенных в PHP функции для распечатки содержимого переменных. Это:
print_r() — распечатывает переменную в краткой форме, создавая отступы при выводе многомерных массивов;
var_dump() — то же, что print_r(), но дополнительно выводит информацию о типах переменных и элементов массива, что иногда бывает удобно при отладке.
Обе функции, тем не менее, обладают двумя недостатками:
необходимо обрамлять результат тегами
…
при выводе его на страницу;
функции не заботятся о преобразовании HTML-сущности в читабельное представление; так, если в переменной находится строка & l t ; она будет выведена в браузер как символ <.
Решить эти проблемы призвана функция, которую мы назвали dumper().
",
htmlspecialchars(dumperGet($obj)),
"";
}
// Возвращает строку - дамп значения переменной в древовидной форме
// (если это массив или объект). В переменной $leftSp хранится
// строка с пробелами, которая будет выводиться слева от текста.
function dumperGet(&$obj, $leftSp = "")
{
if (is_array($obj)) {
$type = "Array[".count($obj)."]";
} elseif (is_object($obj)) {
$type = "Object";
} elseif (gettype($obj) == "boolean") {
return $obj? "true" : "false";
} else {
return "\"$obj\"";
}
$buf = $type;
$leftSp .= " ";
for (Reset($obj); list($k, $v) = each($obj); ) {
if ($k === "GLOBALS") continue;
$buf .= "\n$leftSp$k => ".dumperGet($v, $leftSp);
}
return $buf;
}
?>
Пример использования dumper(). Файл dumperEx.php