Блог
Удобный var_dump для HostCMS
Для вывода содержимого переменной в PHP используется функция var_dump
, это очень простая и полезная функция, но иногда от этой простоты возникают некоторые неудобства, рассмотрим их и возможное решение в контексте HostCMS.
Во-первых, если смотреть содержимое объекта, то оно никак не будет ограничено, будет отображено содержимое всех связанных объектов, которых может быть довольно много, а это делает дамп очень объемным и сложным для восприятия. Во-вторых, никак не ограничен вывод массивов и строк, являющихся свойствами объекта, такие данные как правило избыточны. В-третьих, содержимое сущностей HostCMS выводится со всеми защищенными свойствами, когда мы как правило хотим увидеть только поля этой сущности, а остальные свойства опустить. В-четвертых, при отладке кода на уже запущенном и работающем сайте, желательно не показывать отладочную информацию посетителям сайта, а выводить ее только администраторам.
Неплохо также, чтобы функция дампа переменной выводилась в тегах <pre />
и не приходилось бы постоянно лезть в код страницы за ее читаемым выводом.
Рассудив вышеизложенным образом был реализован класс Kad_Dump
: https://bitbucket.org/KADx/kad_dump
Kad_Dump
За основу вывода дампа переменной было взято решение LeaseWeb labs, упаковано в удобный класс и расширено некоторыми преимуществами специально для HostCMS.
Класс имеет три основных метода, которые устраняют описанные выше неудобства:
// Выводит дамп переменных
Kad_Dump::dump($source1, $source2);
// Выводит дамп переменных и завершает работу
Kad_Dump::dd($source1, $source2);
// Возвращает дамп переменной
$varExport = Kad_Dump::export($source1);
Пример дампа:
array(12) {
[0] => true
[1] => 500
[2] => 1000
[3] => [resource]
[4] => null
[5] => ???
[6] => string(27): "Lorem Ipsum is simply dummy"
[7] => string(74): "Lorem Ipsum is simply dummy text of"...
[8] => string(77): "Lorem\\n\\r Ipsum is simply dummy\\t text"...
[9] => array(2) {
[0] => array(5) {
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
}
[1] => array(1) {
[0] => array(3) {...}
}
}
[10] => stdClass#1 {
[string] => string(6): "string"
[integer] => 1000
[boolean] => true
[array] => array(1) {
[0] => array(1) {...}
}
}
[11] => Module_Model#2 {
[id] => null
[name] => string(11): "test module"
[description] => null
[active] => string(1): "1"
[indexing] => string(1): "1"
[path] => string(4): "test"
[sorting] => 0
[user_id] => 0
[deleted] => 0
}
}
Сокращенная версия
При отладке не очень удобно записывать длинные выражения, поэтому удобно в bootstrap.php
объявить краткие псевдонимы для представленных методов:
function dd()
{
call_user_func_array(array('Kad_Dump', 'dd'), func_get_args());
}
function dump()
{
call_user_func_array(array('Kad_Dump', 'dump'), func_get_args());
}
function export($variable)
{
return Kad_Dump::export($variable);
}
И после использовать следующим образом:
dd($source1, $source2);
dump($source1, $source2);
$varExport = export($source1);