Более красивая / информативная альтернатива Var_dump в PHP? [закрыто]
130
У каждого приличного программиста PHP есть оболочка print_rили, которую var_dumpон использует, любит и назначает сочетания клавиш, почему бы нам не поделиться своими любимыми .
я просто использую echo '<pre>'; print_r ($ var); exit; я даже не закрываю это. Думаю, я не порядочный
Funky Dude
Я отредактировал ссылку, указав на github, где я продолжаю разработку Kint, и если у вас все еще есть проблемы с ним, сообщите мне об этом любым способом.
raveren
1
Эй, Кинт классный! Это просто спасло мой день.
Иштван Удж-Месарош
2
Почему вопрос, который на 100% является рекламным объявлением программы, помещается в версию «я создаю свою собственную var_dump ()» ?? Первый вопрос: почему реклама продукта разрешена как вопрос?
m3nda
11
Потому что я сделал инструмент более года спустя после того, как задал вопрос. Я не знаю, что вас беспокоит, я создал более 10 тысяч зрелых инструментов с открытым исходным кодом и постоянно улучшаю его годы спустя. Я дал свой ответ на вопрос - по традиции в SO.
raveren
Ответы:
71
Спустя целый год работы и времени после того, как я спросил об этом, я наконец открыл исходный код своей версии var_dump, Kint. Об этом читайте на странице проекта , или прямо в github .
Вот скриншот:
Простите за вилку :)
РЕДАКТИРОВАТЬ: Я просто хотел бы напомнить комментаторам, что это не форум поддержки, если у вас возникли проблемы / вы хотите использовать функцию, сообщите о проблеме . Комментарии, запрашивающие поддержку, будут помечены для удаления.
мне пришлось изменить размер шрифта и украсить код CSS, но хорошая работа, мне нравится ... исходящий от давнего пользователя
Krumo
1
какие изменения вы внесли, если вы считаете, что это улучшение, вы можете отправить мне изменения на raveren@gmail.com
raveren
Я привык к Krumo и хотел шрифты меньшего размера, а также украсил код CSS. Ничего такого, что можно было бы назвать настоящим улучшением, больше похоже на старую привычку :)
Quamis
ну, идея заключалась в том, что css должен быть сжат вместе с js, чтобы как можно меньше влиять на фактический вывод. Конечно, был запланирован хороший отступ сгенерированного источника, но сейчас у меня нет времени посвящать Кинту ..
raveren
2
Так же, как пример, Kint показывает защищенные и частные переменные, если вы сбрасываете объект, а krumo - нет (потому что только первый использует классы отражения, как я предполагаю). Вообще говоря, я обнаружил, что Кинт лучше; хотя мне также пришлось настроить css, чтобы сделать его более удобным (этот огромный шрифт не очень хорошо работает при сбросе тонны вложенных свойств). О, и код, стоящий за этим, не беспорядок, чего нельзя сказать о Крумо (извините, автор Крумо!)
Ман
45
Я предпочитаю var_dumpфункцию, предоставляемую расширением Xdebug : просто установите расширение (легко, как в Windows, так и в Linux) , и var_dumpполучите лучший результат:
лучшее форматирование
HTML
цвета
и у вас есть возможность настроить, сколько информации должно отображаться
И быстрый скриншот:
И, конечно же, Xdebug предоставляет множество других полезных вещей, таких как удаленная отладка (то есть графическая отладка вашего PHP-приложения, например, в Eclipse PDT) , профилирование, ...
Мне нужно использовать этот класс форматирования xdebug на общем хосте. Есть ли способ включить его в мой личный проект?
Анюль Ривас 01
1
Если вы не являетесь администратором (root) своего сервера, вы, скорее всего, не сможете установить расширение PHP (я никогда не видел службы общего хостинга, которая установила бы ее для установки расширений PHP) ; так что нет, вы не сможете использовать Xdebug (в любом случае, установка его на рабочий сервер - не лучшая идея: в конце концов, это расширение для отладки) ; вам придется вернуться к реализации функции вывода переменных на основе PHP (см. другие ответы)
Паскаль МАРТИН,
1
да, мне просто нужно, чтобы класс отправлял мне какой-то вывод при возникновении ошибки.
Мне нравится эта функция - простая и понятная, и я уже говорил, что очень просто :)
derekdreery
Спасибо. Я использую это все время. Должен быть действительно встроен в PHP. Вы можете использовать собственное форматирование, используя второй параметр. например, echo $ pretty ($ some_variable, "-");
Гильермо Филлипс
7
Он прекрасно сочетает в себе все худшие возможности print_r, var_dump и var_export. Нет экранирования html, принимает только один параметр, зависает при рекурсии, не может возвращать вывод, и, в довершение всего, он полностью нечитаем . Я не хочу быть засранцем, но комментарии просто заставляют это казаться таким идеальным.
raveren
Спасибо за комментарий @Raveren. Если бы вы могли быть более конкретными, я улучшу свой ответ.
Гильермо Филлипс
2
ИМО, лучшее однострочное решение - это просто function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump - очень подробная функция, она обрабатывает все крайние случаи PHP (которых много) и на 100% стабильна, хотя и не так удобочитаема. Но, в конце концов, если вы сочтете, что ваша реализация лучше всего подходит для вас, вы обязательно должны использовать ее.
raveren
16
Вы ищете Krumo ( Предупреждение, предупреждения Chrome о вредоносном ПО ).
Проще говоря, Krumo - это замена print_r () и var_dump (). По определению Krumo - это инструмент отладки (первоначально для PHP4 / PHP5, теперь только для PHP5), который отображает структурированную информацию о любой переменной PHP.
На самом деле неплохо. Вероятно, проголосовали бы больше, если бы вы показали пример вывода.
Mawg говорит восстановить Монику
@acSlater Подходит для меня, вам просто нужно создать sbwDebugкласс, который он забыл опубликовать, и поместить в него функцию.
Dennis98
6
Недавно я разработал бесплатное расширение chrome (в стадии разработки), чтобы украсить свои дампы var без библиотек, без предварительных тегов и без установки для каждого приложения. Все сделано с помощью JavaScript и regEx. Все, что вам нужно сделать, это установить расширение и готово. Я тоже работаю над версией Firefox. Вот страница GitHub. Я надеюсь, что скоро он будет доступен в интернет-магазинах Chrome и Firefox!
Эти модные библиотеки великолепны ... кроме накладных расходов. Если вам нужен простой и красивый var_dump, который принимает бесконечные параметры, попробуйте мою функцию. Он добавляет простой HTML. Атрибуты данных также добавляются, если вы используете HTML5, более низкие версии просто игнорируют их, но позволяют легко открыть элемент в консоли браузера и получить немного больше информации, если того, что вы видите на экране, недостаточно.
Макет очень простой, без накладных расходов. Предоставляет массу информации для каждого параметра, включая такие вещи, как gettypeи даже classимя для дампов объектов (включая XML). Это проверено и верно, я использую его годами.
И если вы используете Codeigniter, добавьте его тоже свой CI ЧРЕЗВЫЧАЙНО ПРОСТО. Сначала перейдите к application/config/autoload.phpи убедитесь, что helper'string'включен.
$autoload['helper']= array('string');
Затем просто создайте файл с именем MY_string_helper.phpin application/helpersи просто вставьте функцию в типичный ifоператор для проверки существования.
<?php if(!defined('BASEPATH'))exit('No direct script access allowed');if(!function_exists('preDump')){function preDump(){...}}// DON'T CLOSE PHP
| ИЛИ |, если вы хотите пойти в другом направлении.
Следующий фрагмент аналогичен приведенному выше, за исключением того, что ваши переменные будут отображаться в консоли браузера. Иногда это может упростить отладку вызовов объектов sql и других вызовов массивов и объектов, в которых отсутствует имя ключа или что-то еще.
function consoleDump(){// use string "noEcho" to just get a string return only
$args = func_get_args();
$doEcho = TRUE; $sb;if($args){
$sb ='<script type="text/javascript">console.log("<" + new Array('.(count($args)<10?'49':'48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';foreach(func_get_args()as $i => $arg){if(gettype($arg)=='string')if($arg =='noEcho'){ $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/','consoleDump: '.(count($args)-1), $sb);continue;}
$sb .='{ "type": "'.gettype($arg).'", ';switch(gettype($arg)){case"boolean":case"integer":case"string":
$sb .='"value": '.json_encode($arg);break;default:
$sb .='"value": '.json_encode($arg);if(is_object($arg)|| is_array($arg)) $sb .=', "count": '.json_encode(count((array)$arg));if(is_object($arg)) $sb .=', "objectClass": "'.get_class($arg).'"';}
$sb .='}';if($i < count($args)-1) $sb .=', ';}
$sb .=']); console.log("<" + new Array(120).join("-") + ">"); </script>';}else{
$sb ='<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';}if($doEcho) echo($sb);return $sb;}
Работает со всем!
consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array('one'=>'bob','two'=>'bill'),(object)array('one'=>'bob','two'=>'bill'));<------------------------------------------------[consoleDump:6 items]------------------------------------------------->[Object,Object,Object,Object,Object,Object]// This drops down to show your variables in JS objects, like:0:Object
count:4
objectClass:"SimpleXMLElement"
type:"object"value:Object
__proto__:Object// ...etc...<----------------------------------------------------------------------------------------------------------------------->
Зачем беспокоиться о незначительном снижении производительности инструмента разработки? Эта функция буквально echo '<pre>';var_dump($var);echo '</pre>';плюс текст с добавлением нулевого значения.
raveren
@Raveren да, кроме preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an echo 'pre'; var_dump` simple html, а не текст, добавляющий 0. лол кик. Если вам это не нравится, не используйте это. Просто предложение.
SpYk3HH
@Raveren И если вам это понравилось ... вам действительно понравится мое обновление: P
SpYk3HH
1
PHP Array Beautifier Этот простой инструмент принимает массив или объект, выводимый в PHP, такой как оператор print_r (), и форматирует его с помощью цветовой кодировки, чтобы легко читать ваши данные.
http://phillihp.com/toolz/php-array-beautifier/
Мне нравится думать, что это довольно гибко. Он не нацелен на конкретную среду вывода, но имеет множество необязательных аргументов, которые вы можете указать, зачем изменять вывод / печать или поведение, а также некоторые постоянные настройки.
Он в основном выгружает весь массив, где каждый элемент находится в отдельной строке, что полезно для поиска правильных полных путей для определенных элементов.
Я удивлен, что никто не упомянул самый простой (хотя и не очень красивый) код. Если вы просто хотите , чтобы получить читаемый вывод (без цвета или отступа), простой <pre>вокруг var_dumpработ, как в:
Демоверсия не работает, хотя код доступен на GitHub
Mawg говорит, что нужно восстановить Монику
0
Я предпочитаю отладку из https://github.com/hazardland/debug.php, которая представляет собой библиотеку, содержащую только одну функцию с именем debug (вы можете просто скопировать эту функцию в свой проект или в свою библиотеку) . Типичный вывод debug () html выглядит так:
Но вы можете выводить данные в виде простого текста с той же функцией (с 4-мя вкладками с отступом), как это (и даже при необходимости регистрировать их в файле):
string:"Test string"boolean:true
integer :17float:9.99
array (array)
bob :"alice"1:52:1.4object(test2)
another (test3)
string1 :"3d level"
string2 :"123"
complicated (test4)
enough :"Level 4"
Это отличный инструмент, предназначенный для замены ошибочной функции PHP var_dumpи print_r, поскольку он может правильно идентифицировать рекурсивно ссылочные объекты в сложной структуре объектов. Он также имеет рекурсивный контроль глубины, чтобы избежать неопределенного рекурсивного отображения некоторых специфических переменных.
Для других альтернативных решений , которые обеспечивают более преимущества по сравнению с var_dumpи print_rи может поддерживать циклические ссылки, пожалуйста , проверьте: Используя print_r и var_dump с круговой ссылкой .
Мне пришлось добавить здесь еще один ответ, потому что я действительно не хотел повторять шаги в других решениях. Это очень просто и не требует расширений, включает и т. Д., И это то, что я предпочитаю. Это очень просто и очень быстро.
Сначала просто json_encode рассматриваемую переменную:
echo json_encode($theResult);
Скопируйте полученный результат в редактор JSON по адресу http://jsoneditoronline.org/, просто скопируйте его в левую панель, нажмите « Копировать»>, и он распечатает JSON в действительно красивом древовидном формате.
Каждому свое, но, надеюсь, это поможет другим получить еще один хороший вариант! :)
Ответы:
Спустя целый год работы и времени после того, как я спросил об этом, я наконец открыл исходный код своей версии var_dump, Kint. Об этом читайте на странице проекта , или прямо в github .
Вот скриншот:
Простите за вилку :)
РЕДАКТИРОВАТЬ: Я просто хотел бы напомнить комментаторам, что это не форум поддержки, если у вас возникли проблемы / вы хотите использовать функцию, сообщите о проблеме . Комментарии, запрашивающие поддержку, будут помечены для удаления.
источник
Я предпочитаю
var_dump
функцию, предоставляемую расширением Xdebug : просто установите расширение (легко, как в Windows, так и в Linux) , иvar_dump
получите лучший результат:И быстрый скриншот:
И, конечно же, Xdebug предоставляет множество других полезных вещей, таких как удаленная отладка (то есть графическая отладка вашего PHP-приложения, например, в Eclipse PDT) , профилирование, ...
источник
Я написал свой: REF ( demo ):
Планируется добавить рендеринг только текста и отображать информацию о входном выражении, как это делает Kint ...
источник
dll
я воспользуюсь этой «отладкой». Спасибо, и хорошей работы!Вот мой, который я использую inline, очень полезен:
источник
function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}
. Var_dump - очень подробная функция, она обрабатывает все крайние случаи PHP (которых много) и на 100% стабильна, хотя и не так удобочитаема. Но, в конце концов, если вы сочтете, что ваша реализация лучше всего подходит для вас, вы обязательно должны использовать ее.Вы ищете Krumo ( Предупреждение, предупреждения Chrome о вредоносном ПО ).
источник
Я люблю Firephp плюс firebug
источник
Я использовал dBug, который имитирует отличный тег Coldfusion
cfdump
:http://dbug.ospinto.com/examples.php
источник
Мое (частичное) решение - просто добавить такую функцию (с помощью Google Chrome):
Нажмите Ctrl + Shift + J (открывает консоль), и вы можете найти там структуру JSON. Еще более полезно для красивой печати ответов JSON, конечно.
источник
Полный пример того, что я использую ...
Выходы ...
источник
Вот мой:
В стиле:
источник
sbwDebug
класс, который он забыл опубликовать, и поместить в него функцию.Недавно я разработал бесплатное расширение chrome (в стадии разработки), чтобы украсить свои дампы var без библиотек, без предварительных тегов и без установки для каждого приложения. Все сделано с помощью JavaScript и regEx. Все, что вам нужно сделать, это установить расширение и готово. Я тоже работаю над версией Firefox. Вот страница GitHub. Я надеюсь, что скоро он будет доступен в интернет-магазинах Chrome и Firefox!
https://github.com/alexnaspo/var_dumpling
Вот пример вывода:
источник
Tracy имеет красивый разборный вывод , используя дамп () функцию .
источник
Эти модные библиотеки великолепны ... кроме накладных расходов. Если вам нужен простой и красивый var_dump, который принимает бесконечные параметры, попробуйте мою функцию. Он добавляет простой HTML. Атрибуты данных также добавляются, если вы используете HTML5, более низкие версии просто игнорируют их, но позволяют легко открыть элемент в консоли браузера и получить немного больше информации, если того, что вы видите на экране, недостаточно.
Макет очень простой, без накладных расходов. Предоставляет массу информации для каждого параметра, включая такие вещи, как
gettype
и дажеclass
имя для дампов объектов (включая XML). Это проверено и верно, я использую его годами.И если вы используете Codeigniter, добавьте его тоже свой CI ЧРЕЗВЫЧАЙНО ПРОСТО. Сначала перейдите к
application/config/autoload.php
и убедитесь, чтоhelper
'string'
включен.Затем просто создайте файл с именем
MY_string_helper.php
inapplication/helpers
и просто вставьте функцию в типичныйif
оператор для проверки существования.| ИЛИ |, если вы хотите пойти в другом направлении.
Следующий фрагмент аналогичен приведенному выше, за исключением того, что ваши переменные будут отображаться в консоли браузера. Иногда это может упростить отладку вызовов объектов sql и других вызовов массивов и объектов, в которых отсутствует имя ключа или что-то еще.
Работает со всем!
источник
echo '<pre>';var_dump($var);echo '</pre>';
плюс текст с добавлением нулевого значения.preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an
echo 'pre'; var_dump`simple html
, а не текст, добавляющий 0. лол кик. Если вам это не нравится, не используйте это. Просто предложение.PHP Array Beautifier Этот простой инструмент принимает массив или объект, выводимый в PHP, такой как оператор print_r (), и форматирует его с помощью цветовой кодировки, чтобы легко читать ваши данные. http://phillihp.com/toolz/php-array-beautifier/
источник
Еще одна доморощенная версия:
http://github.com/perchten/neat_html
Мне нравится думать, что это довольно гибко. Он не нацелен на конкретную среду вывода, но имеет множество необязательных аргументов, которые вы можете указать, зачем изменять вывод / печать или поведение, а также некоторые постоянные настройки.
источник
Вот расширение для Chrome, которое я написал для решения этой проблемы.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
источник
Я разработал расширение Chrome и плагин jquery , чтобы украсить var_dumps.
https://github.com/netfox01/fleX-debug
источник
Если вы имеете дело с очень большими массивами в PHP, эта функция может помочь:
Он в основном выгружает весь массив, где каждый элемент находится в отдельной строке, что полезно для поиска правильных полных путей для определенных элементов.
Пример вывода:
См .: Как экспортировать массив PHP, где каждая пара ключ-значение находится в отдельной строке?
источник
Я удивлен, что никто не упомянул самый простой (хотя и не очень красивый) код. Если вы просто хотите , чтобы получить читаемый вывод (без цвета или отступа), простой
<pre>
вокругvar_dump
работ, как в:Невозможно получить намного меньшие накладные расходы, чем это!
источник
Я написал небольшой класс, похожий на Krumo, но его гораздо проще встроить в приложение.
Вот ссылка: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
И вот пример вывода: http://langpavel.php5.cz/debug_sample.html
источник
Я предпочитаю отладку из https://github.com/hazardland/debug.php, которая представляет собой библиотеку, содержащую только одну функцию с именем debug (вы можете просто скопировать эту функцию в свой проект или в свою библиотеку) . Типичный вывод debug () html выглядит так:
Но вы можете выводить данные в виде простого текста с той же функцией (с 4-мя вкладками с отступом), как это (и даже при необходимости регистрировать их в файле):
источник
TVarDumper
Это отличный инструмент, предназначенный для замены ошибочной функции PHP
var_dump
иprint_r
, поскольку он может правильно идентифицировать рекурсивно ссылочные объекты в сложной структуре объектов. Он также имеет рекурсивный контроль глубины, чтобы избежать неопределенного рекурсивного отображения некоторых специфических переменных.См:
TVarDumper.php
.Для других альтернативных решений , которые обеспечивают более преимущества по сравнению с
var_dump
иprint_r
и может поддерживать циклические ссылки, пожалуйста , проверьте: Используя print_r и var_dump с круговой ссылкой .Дополнительные идеи см. Также: Как отлаживать сценарии PHP?
источник
Мой, более простой, для меня у меня мало знаний / времени, чтобы изменить инфраструктуру, установить xdebug и т. Д. И т. Д.
А в других случаях вам не нужно много, например, для простого веб-сайта WP
Поэтому я использую:
это действительно мне очень помогло.
но поскольку я предпочитаю среду DevConsole, я использую эту замечательную, но простую функцию:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Небольшая настройка:
источник
Другой вариант заключается в
Затем в вашем файле вы просто используете,
dump($var)
и вы получите такой результатисточник
Мне пришлось добавить здесь еще один ответ, потому что я действительно не хотел повторять шаги в других решениях. Это очень просто и не требует расширений, включает и т. Д., И это то, что я предпочитаю. Это очень просто и очень быстро.
Сначала просто json_encode рассматриваемую переменную:
Скопируйте полученный результат в редактор JSON по адресу http://jsoneditoronline.org/, просто скопируйте его в левую панель, нажмите « Копировать»>, и он распечатает JSON в действительно красивом древовидном формате.
Каждому свое, но, надеюсь, это поможет другим получить еще один хороший вариант! :)
источник