Удобный 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);
comments powered by Disqus


Следующий "Роскомнадзор vs. Cloudflare" К списку Предыдущий "Акция: почасовые услуги программирования со скидкой 30%"