У кожного порядного програміста PHP є print_r
або var_dump
обгортка, яку вони використовують, люблять і призначають клавіші швидкого доступу, чому б нам не поділитися нашими улюбленими .
У кожного порядного програміста PHP є print_r
або var_dump
обгортка, яку вони використовують, люблять і призначають клавіші швидкого доступу, чому б нам не поділитися нашими улюбленими .
Відповіді:
Після повного запиту про це, я, нарешті, відкрив свою версію var_dump, Kint. Про це читайте на сторінці проекту або безпосередньо в github .
Ось скріншот:
Вибачте за плагін :)
EDIT: Я просто хотів би нагадати коментаторам, що це не форум підтримки, якщо у вас є проблеми / хочете функцію, будь ласка, подайте проблему . Підтримка, що вимагає коментарів, буде позначена для видалення.
Моїм перевагою є var_dump
функція, передбачена розширенням Xdebug : просто встановіть розширення (легко, як на Windows, так і на Linux) , і ви var_dump
отримаєте кращий результат:
І швидкий скріншот:
І, звичайно, Xdebug приносить безліч інших корисних речей, таких як віддалена налагодження (тобто графічна налагодження вашої програми PHP, наприклад, у PDC Eclipse) , профілювання, ...
Плани полягають у додаванні лише текстового відображення та відображенні інформації про вхідний вираз, як Kint ...
dll
I, я використаю цю "налагодження". Дякую, і приємної роботи!
Ось моя, яку я використовую вбудованою, дуже корисна:
$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 - дуже багатослівна функція, вона обробляє всі випадки речей PHPs (серед яких є ЛОТИ) і є на 100% стабільною, хоча і не такою, що читається. Але в кінці дня, якщо ви вважаєте, що ваша реалізація найкраща для вас, це те, що ви обов'язково повинні використовувати.
Ви шукаєте Krumo ( Попередження, сповіщення Chrome про зловмисне програмне забезпечення ).
Простіше кажучи, Krumo є заміною для print_r () і var_dump (). За визначенням, Krumo - це інструмент налагодження (спочатку для PHP4 / PHP5, тепер лише для PHP5), який відображає структуровану інформацію про будь-яку змінну PHP.
Я використовував dBug, який імітує дивовижний cfdump
тег Coldfusion :
Моє (часткове) рішення для цього - просто додати таку функцію, як ця (за допомогою 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
клас, який він забув опублікувати, і помістити в нього функцію.
Нещодавно я розробив безкоштовне розширення для хромування (незавершене виробництво), щоб прикрасити мої варварські смітники без бібліотек, попередніх тегів і не встановлення для кожного додатка. Все зроблено за допомогою 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.php
в 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
відлуння 'до'; var_dump` з деякими simple html
навколо нього, а не 0-додаючим текст. lol kik. Якщо вам це не подобається, не використовуйте його. Просто пропозиція.
PHP Array Beautifier Цей простий інструмент приймає масив або вихідний об'єкт у PHP, наприклад, оператор print_r () та форматує його в кольоровому кодуванні для легкого зчитування даних. http://phillihp.com/toolz/php-array-beautifier/
Ще одна домашня версія:
http://github.com/perchten/neat_html
Мені подобається вважати, що це досить гнучко. Він не спрямований на конкретне вихідне середовище, але має купу необов'язкових аргументів, за допомогою яких можна вказати, чому змінювати вихід / друк чи поведінку, а також деякі стійкі налаштування.
Ось хромоване розширення, яке я написав для вирішення цієї проблеми.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
Я розробив хромоване розширення та плагін 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>";
Не можна отримати набагато нижчі накладні витрати, ніж це!
Я написав невеликий клас, схожий на Крумо, але набагато простіше вставити в додаток.
Ось посилання: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
І ось зразок виводу: http://langpavel.php5.cz/debug_sample.html
Моєю перевагою є налагодження з https://github.com/hazardland/debug.php, яка є бібліотекою, що містить лише одну функцію, названу як налагодження (Ви можете просто скопіювати цю функцію у вашому проекті чи у своїй бібліотеці) . Типовий вихідний файл 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_enкодуйте цю змінну:
echo json_encode($theResult);
Скопіюйте результат, який ви отримаєте в редакторі JSON за адресою http://jsoneditoronline.org/, просто скопіюйте його на ліву бічну панель, натисніть « Копіювати»> і він досить друкує JSON у дуже гарному форматі дерева.
У кожного свої, але сподіваємось, це допомагає деяким іншим мати ще один приємний варіант! :)