У каждого приличного программиста PHP есть оболочка print_rили, которую var_dumpон использует, любит и назначает сочетания клавиш, почему бы нам не поделиться своими любимыми .
У каждого приличного программиста PHP есть оболочка print_rили, которую var_dumpон использует, любит и назначает сочетания клавиш, почему бы нам не поделиться своими любимыми .
Ответы:
Спустя целый год работы и времени после того, как я спросил об этом, я наконец открыл исходный код своей версии var_dump, Kint. Об этом читайте на странице проекта , или прямо в github .
Вот скриншот:

Простите за вилку :)
РЕДАКТИРОВАТЬ: Я просто хотел бы напомнить комментаторам, что это не форум поддержки, если у вас возникли проблемы / вы хотите использовать функцию, сообщите о проблеме . Комментарии, запрашивающие поддержку, будут помечены для удаления.
Я предпочитаю var_dumpфункцию, предоставляемую расширением Xdebug : просто установите расширение (легко, как в Windows, так и в Linux) , и var_dumpполучите лучший результат:
И быстрый скриншот:
И, конечно же, Xdebug предоставляет множество других полезных вещей, таких как удаленная отладка (то есть графическая отладка вашего PHP-приложения, например, в Eclipse PDT) , профилирование, ...

Планируется добавить рендеринг только текста и отображать информацию о входном выражении, как это делает Kint ...
dllя воспользуюсь этой «отладкой». Спасибо, и хорошей работы!
Вот мой, который я использую inline, очень полезен:
$pretty = function($v='',$c=" ",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'<NULL>':"<strong>$v</strong>");}return$r;};
echo $pretty($some_variable);
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 о вредоносном ПО ).
Проще говоря, Krumo - это замена print_r () и var_dump (). По определению Krumo - это инструмент отладки (первоначально для PHP4 / PHP5, теперь только для PHP5), который отображает структурированную информацию о любой переменной PHP.
Я использовал dBug, который имитирует отличный тег Coldfusion cfdump:
Мое (частичное) решение - просто добавить такую функцию (с помощью Google Chrome):
<?
function console_dump($value)
{
?>
<script>
console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>
Нажмите Ctrl + Shift + J (открывает консоль), и вы можете найти там структуру JSON. Еще более полезно для красивой печати ответов JSON, конечно.
Полный пример того, что я использую ...
<pre>
<?php
//*********** Set up some sample data
$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);
$options = array(
'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
2=>'Car',
4=>'Bus',
'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));
//*********** Define the function
function dump($data, $indent=0) {
$retval = '';
$prefix=\str_repeat(' | ', $indent);
if (\is_numeric($data)) $retval.= "Number: $data";
elseif (\is_string($data)) $retval.= "String: '$data'";
elseif (\is_null($data)) $retval.= "NULL";
elseif ($data===true) $retval.= "TRUE";
elseif ($data===false) $retval.= "FALSE";
elseif (is_array($data)) {
$retval.= "Array (".count($data).')';
$indent++;
foreach($data AS $key => $value) {
$retval.= "\n$prefix [$key] = ";
$retval.= dump($value, $indent);
}
}
elseif (is_object($data)) {
$retval.= "Object (".get_class($data).")";
$indent++;
foreach($data AS $key => $value) {
$retval.= "\n$prefix $key -> ";
$retval.= dump($value, $indent);
}
}
return $retval;
}
//*********** Dump the data
echo dump($options);
?>
</pre>
Выходы ...
Array (4)
[Orchestra] = Array (5)
| [1] = String: 'Strings'
| [8] = String: 'Brass'
| [9] = Object (stdClass)
| | a -> Number: 123
| | pl -> Number: 44
| | l -> Array (2)
| | | [0] = Number: 31
| | | [1] = Number: 32
| [3] = String: 'Woodwind'
| [16] = String: 'Percussion'
[2] = String: 'Car'
[4] = String: 'Bus'
[TV] = Array (5)
| [21] = String: 'Only Fools'
| [215] = String: 'Brass Eye'
| [23] = String: 'Vic Bob'
| [44] = NULL
| [89] = FALSE
Вот мой:
class sbwDebug
{
public static function varToHtml($var = '', $key = '')
{
$type = gettype($var);
$result = '';
if (in_array($type, ['object', 'array'])) {
$result .= '
<table class="debug-table">
<tr>
<td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
<td class="debug-value-cell">';
foreach ($var as $akey => $val) {
$result .= sbwDebug::varToHtml($val, $akey);
}
$result .= '</td></tr></table>';
} else {
$result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
}
return $result;
}
}
В стиле:
table.debug-table {
padding: 0;
margin: 0;
font-family: arial,tahoma,helvetica,sans-serif;
font-size: 11px;
}
td.debug-key-cell {
vertical-align: top;
padding: 3px;
border: 1px solid #AAAAAA;
}
td.debug-value-cell {
vertical-align: top;
padding: 3px;
border: 1px solid #AAAAAA;
}
div.debug-item {
border-bottom: 1px dotted #AAAAAA;
}
span.debug-label {
font-weight: bold;
}
sbwDebugкласс, который он забыл опубликовать, и поместить в него функцию.
Недавно я разработал бесплатное расширение chrome (в стадии разработки), чтобы украсить свои дампы var без библиотек, без предварительных тегов и без установки для каждого приложения. Все сделано с помощью JavaScript и regEx. Все, что вам нужно сделать, это установить расширение и готово. Я тоже работаю над версией Firefox. Вот страница GitHub. Я надеюсь, что скоро он будет доступен в интернет-магазинах Chrome и Firefox!
https://github.com/alexnaspo/var_dumpling
Вот пример вывода:

Tracy имеет красивый разборный вывод , используя дамп () функцию .
Эти модные библиотеки великолепны ... кроме накладных расходов. Если вам нужен простой и красивый var_dump, который принимает бесконечные параметры, попробуйте мою функцию. Он добавляет простой HTML. Атрибуты данных также добавляются, если вы используете HTML5, более низкие версии просто игнорируют их, но позволяют легко открыть элемент в консоли браузера и получить немного больше информации, если того, что вы видите на экране, недостаточно.
Макет очень простой, без накладных расходов. Предоставляет массу информации для каждого параметра, включая такие вещи, как gettypeи даже classимя для дампов объектов (включая XML). Это проверено и верно, я использую его годами.
function preDump() { // use string "noEcho" to just get a string return only
$args = func_get_args();
$doEcho = TRUE; $sb;
if ($args) {
$sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
foreach (func_get_args() as $arg) {
if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
$sb .= '<pre data-type="'.gettype($arg).'"';
switch (gettype($arg)) {
case "boolean":
case "integer":
$sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
$sb .= json_encode($arg);
break;
case "string":
$sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
$sb .= $arg;
break;
default:
$sb .= ' data-dump="var_dump"';
if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
$sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
$sb .= '</b></p><p>';
ob_start();
var_dump($arg);
$sb .= ob_get_clean();
if (ob_get_length()) ob_end_clean();
}
$sb .= '</p></pre>';
}
$sb .= '</fieldset></div>';
}
else {
$sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
}
if ($doEcho) echo($sb);
return $sb;
}
И если вы используете 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>';плюс текст с добавлением нулевого значения.
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.
Если вы имеете дело с очень большими массивами в PHP, эта функция может помочь:
function recursive_print ($varname, $varval) {
if (! is_array($varval)):
print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
else:
print $varname . " = array();<br>\n";
foreach ($varval as $key => $val):
recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
endforeach;
endif;
}
Он в основном выгружает весь массив, где каждый элемент находится в отдельной строке, что полезно для поиска правильных полных путей для определенных элементов.
Пример вывода:
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
См .: Как экспортировать массив PHP, где каждая пара ключ-значение находится в отдельной строке?
Я удивлен, что никто не упомянул самый простой (хотя и не очень красивый) код. Если вы просто хотите , чтобы получить читаемый вывод (без цвета или отступа), простой <pre>вокруг var_dumpработ, как в:
echo "<pre>";
var_dump($myvariable);
echo "</pre>";
Невозможно получить намного меньшие накладные расходы, чем это!
Я написал небольшой класс, похожий на 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-мя вкладками с отступом), как это (и даже при необходимости регистрировать их в файле):
string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
bob : "alice"
1 : 5
2 : 1.4
object (test2)
another (test3)
string1 : "3d level"
string2 : "123"
complicated (test4)
enough : "Level 4"
Это отличный инструмент, предназначенный для замены ошибочной функции PHP var_dumpи print_r, поскольку он может правильно идентифицировать рекурсивно ссылочные объекты в сложной структуре объектов. Он также имеет рекурсивный контроль глубины, чтобы избежать неопределенного рекурсивного отображения некоторых специфических переменных.
См: TVarDumper.php.
Для других альтернативных решений , которые обеспечивают более преимущества по сравнению с var_dumpи print_rи может поддерживать циклические ссылки, пожалуйста , проверьте: Используя print_r и var_dump с круговой ссылкой .
Дополнительные идеи см. Также: Как отлаживать сценарии PHP?
Мой, более простой, для меня у меня мало знаний / времени, чтобы изменить инфраструктуру, установить xdebug и т. Д. И т. Д.
А в других случаях вам не нужно много, например, для простого веб-сайта WP
Поэтому я использую:
highlight_string("\n<?" . var_export($var, true) . "?>\n");
это действительно мне очень помогло.
но поскольку я предпочитаю среду DevConsole, я использую эту замечательную, но простую функцию:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Небольшая настройка:
<?php
/**
* Logs messages/variables/data to browser console from within php
*
* @param $name: message to be shown for optional data/vars
* @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
* @param $jsEval: whether to apply JS eval() to arrays/objects
*
* @return none
* @author Sarfraz
*/
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
if (! $name) return false;
$isevaled = false;
$type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';
if ($jsEval && (is_array($data) || is_object($data)))
{
$data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
$isevaled = true;
}
else
{
$data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
}
# sanitalize
$data = $data ? $data : '';
$search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
$replace_array = array('"', '', '', '\\n', '\\n');
$data = preg_replace($search_array, $replace_array, $data);
$data = ltrim(rtrim($data, '"'), '"');
$data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";
$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback
console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;
echo $js;
} # end logConsole
Мне пришлось добавить здесь еще один ответ, потому что я действительно не хотел повторять шаги в других решениях. Это очень просто и не требует расширений, включает и т. Д., И это то, что я предпочитаю. Это очень просто и очень быстро.
Сначала просто json_encode рассматриваемую переменную:
echo json_encode($theResult);
Скопируйте полученный результат в редактор JSON по адресу http://jsoneditoronline.org/, просто скопируйте его в левую панель, нажмите « Копировать»>, и он распечатает JSON в действительно красивом древовидном формате.
Каждому свое, но, надеюсь, это поможет другим получить еще один хороший вариант! :)