Setiap programmer PHP yang layak memiliki print_r
atau var_dump
bungkus yang mereka gunakan, suka dan tetapkan tombol pintas, mengapa kita tidak membagikan yang favorit kami .
Setiap programmer PHP yang layak memiliki print_r
atau var_dump
bungkus yang mereka gunakan, suka dan tetapkan tombol pintas, mengapa kita tidak membagikan yang favorit kami .
Jawaban:
Setahun penuh waktu dan tenaga setelah menanyakan hal ini, saya akhirnya membuka versi var_dump versi saya, Kint. Baca tentang itu di halaman proyek , atau langsung di github .
Berikut screenshotnya:
Maaf untuk colokannya :)
EDIT: Saya hanya ingin mengingatkan para komentator, bahwa ini bukan forum dukungan, jika Anda mengalami masalah / ingin fitur, silakan ajukan masalah . Dukungan meminta komentar akan ditandai untuk dihapus.
Pilihan saya adalah var_dump
fungsi, yang disediakan oleh ekstensi Xdebug : cukup instal ekstensi (mudah, baik di windows dan Linux) , dan var_dump
dapatkan output yang lebih baik:
Dan tangkapan layar cepat:
Dan, tentu saja, Xdebug membawa banyak hal berguna lainnya, seperti debugging jarak jauh (yaitu debugging grafis aplikasi PHP Anda, misalnya di Eclipse PDT) , pembuatan profil, ...
Saya menulis sendiri: REF ( demo ):
Rencananya adalah menambahkan rendering hanya teks, dan menampilkan info tentang ekspresi input seperti yang dilakukan Kint ...
dll
saya akan menggunakan "debug" ini. Terima kasih, dan kerja bagus!
Ini milik saya, yang saya gunakan sebaris, sangat berguna:
$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 adalah fungsi yang sangat verbose, ia menangani semua kasus tepi PHP (yang ada BANYAK) dan 100% stabil, meskipun tidak dapat dibaca. Tetapi pada akhirnya, jika Anda menemukan implementasi Anda yang terbaik untuk Anda, itulah yang harus Anda gunakan.
Anda mencari Krumo ( Peringatan, lansiran Chrome untuk Malware ).
Sederhananya, Krumo adalah pengganti print_r () dan var_dump (). Menurut definisi, Krumo adalah alat debugging (awalnya untuk PHP4 / PHP5, sekarang hanya untuk PHP5), yang menampilkan informasi terstruktur tentang variabel PHP apa pun.
Saya suka Firephp plus firebug
Saya telah menggunakan dBug, yang mengemulasi cfdump
tag keren Coldfusion :
Solusi saya (sebagian) untuk ini adalah cukup tambahkan fungsi seperti ini (menggunakan Google Chrome):
<?
function console_dump($value)
{
?>
<script>
console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>
Tekan Ctrl + Shift + J (membuka konsol), dan Anda dapat menemukan di sana struktur JSON. Bahkan lebih berguna untuk mencetak respons JSON dari kursus.
Contoh lengkap tentang apa yang saya gunakan ...
<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>
Keluaran ...
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
Ini milik saya:
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;
}
}
Ditata dengan:
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
kelas yang ia lupa posting dan memasukkan fungsi di dalamnya.
Saya baru-baru ini mengembangkan ekstensi krom gratis (sedang dalam proses) untuk mempercantik var dumps saya tanpa perpustakaan, tanpa tag pra dan tidak ada instalasi untuk setiap aplikasi. Semua dilakukan dengan JavaScript dan regEx. Yang harus Anda lakukan adalah menginstal ekstensi dan kebaikan Anda. Saya sedang mengerjakan versi Firefox juga. Inilah halaman GitHub. Saya berharap segera tersedia di webstore chrome dan firefox!
https://github.com/alexnaspo/var_dumpling
Berikut adalah contoh output:
Perpustakaan-perpustakaan mewah itu hebat ... kecuali overhead. Jika Anda ingin var_dump sederhana dan cantik yang mengambil parameter tak terbatas, coba fungsi saya. Itu menambahkan beberapa HTML sederhana. Atribut data ditambahkan juga, jika Anda menggunakan HTML5, versi yang lebih rendah hanya akan mengabaikannya, tetapi membuatnya mudah untuk membuka elemen di konsol browser dan mendapatkan sedikit lebih banyak info jika apa yang Anda lihat di layar tidak cukup.
Tata letaknya sangat sederhana, tanpa overhead. Memberikan banyak info untuk setiap parameter termasuk hal-hal seperti gettype
dan bahkan class
nama untuk Object dumps (termasuk XML). Sudah dicoba dan benar, saya sudah menggunakannya selama bertahun-tahun.
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;
}
Dan Jika Anda menggunakan Codeigniter, tambahkan juga CI Anda SANGAT HANYA. Pertama, pergi ke application/config/autoload.php
dan pastikan helper
'string'
sudah menyala.
$autoload['helper'] = array( 'string' );
Kemudian hanya pergi membuat sebuah file bernama MY_string_helper.php
dalam application/helpers
dan sederhana insert fungsi di khas if
pernyataan untuk check keberadaan.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
if (!function_exists('preDump')) {
function preDump() {
...
}
}
// DON'T CLOSE PHP
| ATAU |, jika Anda ingin mengambil arah yang berbeda.
Cuplikan berikut ini sama dengan di atas, kecuali akan menunjukkan variabel Anda di konsol browser. Ini kadang-kadang membuatnya lebih mudah untuk men-debug panggilan objek sql dan panggilan array dan objek lainnya di mana Anda kehilangan nama kunci atau apa pun.
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;
}
Bekerja dengan segalanya!
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>';
ditambah beberapa teks bernilai tambah nol.
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` dengan beberapa simple html
di sekitarnya, bukan 0-nilai tambah teks. lol kik. Jika Anda tidak menyukainya, jangan gunakan itu. Hanya sebuah saran.
PHP Array Beautifier Alat sederhana ini mengambil output array atau objek dalam PHP, seperti pernyataan print_r () dan memformatnya dalam kode warna untuk dengan mudah membaca data Anda. http://phillihp.com/toolz/php-array-beautifier/
Versi lain yang dikembangkan di rumah:
http://github.com/perchten/neat_html
Saya suka berpikir itu cukup fleksibel. Ini tidak bertujuan untuk lingkungan output tertentu tetapi memiliki banyak argumen opsional yang dapat Anda tentukan mengapa mengubah output / cetak atau perilaku, serta beberapa pengaturan yang persisten.
Berikut ini adalah ekstensi chrome yang saya tulis untuk mengatasi masalah ini.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
Saya mengembangkan ekstensi chrome dan plugin jquery untuk mempercantik var_dumps
Jika Anda berurusan dengan array yang sangat besar di PHP, fungsi ini dapat membantu:
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;
}
Ini pada dasarnya membuang seluruh array di mana setiap elemen berada di baris terpisah, yang bermanfaat untuk menemukan jalur penuh yang tepat untuk elemen-elemen tertentu.
Contoh output:
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
Lihat: Bagaimana cara mengekspor array PHP di mana setiap pasangan kunci-nilai berada di baris terpisah?
Saya terkejut tidak ada yang menyebutkan kode termudah (meskipun tidak terlalu cantik). Jika Anda hanya ingin mendapatkan hasil yang dapat dibaca (tanpa warna atau lekukan), sederhana di <pre>
sekitar var_dump
karya, seperti pada:
echo "<pre>";
var_dump($myvariable);
echo "</pre>";
Tidak bisa mendapatkan overhead yang lebih rendah dari ini!
Saya menulis kelas kecil yang mirip dengan Krumo, tetapi jauh lebih mudah untuk disematkan ke aplikasi.
Berikut ini tautannya: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
Dan di sini contoh output: http://langpavel.php5.cz/debug_sample.html
Pilihan saya adalah debug dari https://github.com/hazardland/debug.php yang merupakan pustaka dengan hanya berisi fungsi tunggal bernama debug (Anda hanya dapat menyalin fungsi itu di proyek Anda atau di perpustakaan Anda) . Keluaran debug () khas html terlihat seperti ini:
Tetapi Anda dapat menampilkan data sebagai teks biasa dengan fungsi yang sama juga (dengan 4 spasi indentasi tab) seperti ini (dan bahkan mencatatnya dalam file jika diperlukan):
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"
Ini adalah alat yang hebat yang dimaksudkan untuk menggantikan fungsi PHP buggy var_dump
dan print_r
, karena dapat dengan benar mengidentifikasi objek yang direferensikan secara rekursif dalam struktur objek yang kompleks. Ini juga memiliki kontrol kedalaman rekursif untuk menghindari tampilan rekursif tak terbatas dari beberapa variabel khusus.
Lihat: TVarDumper.php
.
Untuk solusi alternatif lain yang memberikan lebih banyak kelebihan var_dump
dan print_r
dan dapat mendukung referensi melingkar, silakan periksa: Menggunakan print_r dan var_dump dengan referensi melingkar .
Untuk lebih banyak ide, periksa juga: Bagaimana Anda men-debug skrip PHP?
Milik saya, lebih sederhana, bagi saya saya tidak memiliki banyak pengetahuan / waktu untuk mengubah infrastruktur menginstal xdebug, dll.
Dan dalam kasus lain, Anda tidak perlu banyak untuk situs web WP sederhana misalnya
Jadi saya menggunakan:
highlight_string("\n<?" . var_export($var, true) . "?>\n");
itu sangat membantu saya.
tetapi karena saya lebih suka Lingkungan DevConsole saya menggunakan fungsi yang luar biasa tapi sederhana ini:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Tweak kecil:
<?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
Saya harus menambahkan jawaban lain di sini karena saya tidak benar-benar ingin melalui langkah-langkah dalam solusi lain. Ini sangat sederhana dan tidak memerlukan ekstensi, termasuk dll dan itulah yang saya sukai. Sangat mudah dan sangat cepat.
Pertama, cukup json_encode variabel yang dimaksud:
echo json_encode($theResult);
Salin hasil yang Anda dapatkan ke Editor JSON di http://jsoneditoronline.org/ cukup salin ke panel sebelah kiri, klik Salin> dan cukup cetak JSON dalam format pohon yang sangat bagus.
Untuk masing-masing, tetapi mudah-mudahan ini membantu beberapa orang lain memiliki satu lagi opsi bagus! :)