Her düzgün PHP programcısının kullandıkları, sevdikleri ve kısayol tuşlarını atadıkları bir print_r
veya var_dump
sarmalayıcıya sahiptir , neden en sevdiklerimizi paylaşmıyoruz ?
Her düzgün PHP programcısının kullandıkları, sevdikleri ve kısayol tuşlarını atadıkları bir print_r
veya var_dump
sarmalayıcıya sahiptir , neden en sevdiklerimizi paylaşmıyoruz ?
Yanıtlar:
Bunu sorduktan sonra tam bir yıl ve emek, sonunda var_dump sürümüm olan Kint'i açtım. Bunu proje sayfasında veya doğrudan github'da okuyun .
İşte bir ekran görüntüsü:
Fiş için üzgünüm :)
DÜZENLEME: Yorum yapanlara bunun bir destek forumu olmadığını hatırlatmak isterim, sorun yaşıyorsanız / bir özellik istiyorsanız, lütfen bir sorun bildirin . Yorum isteyen destek, silinmek üzere işaretlenecektir.
Tercih ettiğim, Xdebug uzantısı tarafından sağlananvar_dump
işlev : sadece uzantıyı yükleyin (hem Windows hem de Linux'ta kolay) ve daha iyi bir çıktı elde edin:var_dump
Ve hızlı bir ekran görüntüsü:
Ve elbette, Xdebug, uzaktan hata ayıklama (örneğin, PHP uygulamanızın örneğin Eclipse PDT'de grafiksel hata ayıklaması) , profil oluşturma, ...
Planlar, yalnızca metin oluşturma eklemek ve Kint'in yaptığı gibi girdi ifadesi hakkında bilgi görüntülemektir ...
dll
bu "hata ayıklama" yı kullanacağım. Teşekkürler ve iyi iş çıkardınız!
İşte satır içi kullandığım benimki çok kullanışlı:
$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 çok ayrıntılı bir işlevdir, tüm PHP'nin uç durumlarını (LOTS vardır) işler ve okunabilir olmasa bile% 100 kararlıdır. Ancak günün sonunda, uygulamanızın sizin için en iyisi olduğunu düşünüyorsanız, kesinlikle kullanmanız gereken şey budur.
Krumo'yu arıyorsunuz ( Uyarı, Kötü Amaçlı Yazılımlar için Chrome uyarıları ).
Basitçe söylemek gerekirse Krumo, print_r () ve var_dump () yerine geçer. Tanım gereği Krumo, herhangi bir PHP değişkeni hakkında yapılandırılmış bilgileri görüntüleyen bir hata ayıklama aracıdır (başlangıçta PHP4 / PHP5 için, şimdi yalnızca PHP5 için).
Coldfusion'ın harika cfdump
etiketini taklit eden dBug kullanıyorum :
Bunun için (kısmi) çözümüm basitçe şöyle bir işlev eklemek (Google Chrome kullanarak):
<?
function console_dump($value)
{
?>
<script>
console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>
Ctrl + Shift + J tuşlarına basın (konsolu açar) ve orada JSON yapısını bulabilirsiniz. Elbette JSON yanıtlarının güzel bir baskısı için daha da kullanışlı.
Kullandığım şeyin eksiksiz bir örneği ...
<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>
Çıktılar ...
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
İşte benim:
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;
}
}
Tarz:
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
göndermeyi unuttuğu sınıfı yaratmanız ve fonksiyonu içine koymanız gerekiyor.
Kısa bir süre önce var dökümlerimi kitaplık, ön etiket ve her uygulamaya kurulum olmadan güzelleştirmek için ücretsiz bir Chrome uzantısı geliştirdim (devam eden çalışma). Hepsi JavaScript ve regEx ile yapılır. Tek yapmanız gereken uzantıyı yüklemek ve gitmeniz için iyi bir şey. Ben de bir Firefox sürümü üzerinde çalışıyorum. İşte GitHub sayfası. Umarım yakında Chrome ve Firefox web mağazalarında da bulabilirsiniz!
https://github.com/alexnaspo/var_dumpling
İşte bir örnek çıktı:
Tracy'nin dump () işlevini kullanan güzel bir daraltılabilir çıktı vardır .
Bu süslü kütüphaneler harika ... ek yük hariç. Sonsuz parametreler alan basit, güzel bir var_dump istiyorsanız, işlevimi deneyin. Bazı basit HTML ekler. Veri öznitelikleri de eklenir, HTML5 kullanırsanız, daha düşük sürümler onları yok sayar, ancak öğeyi tarayıcı konsolunda açmayı ve ekranda gördükleriniz yeterli değilse biraz daha fazla bilgi almayı kolaylaştırır.
Düzen çok basit, ek yük yok. Her parametre için, Nesne dökümleri (XML dahil) gibi şeyler gettype
ve hatta class
adlar dahil olmak üzere bir ton bilgi sağlar . Denendi ve doğru, yıllardır kullanıyorum.
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;
}
Ve Codeigniter kullanıyorsanız, onu da son derece basit bir şekilde CI'nize ekleyin. İlk önce gidin application/config/autoload.php
ve açık olduğundan emin olun helper
'string'
.
$autoload['helper'] = array( 'string' );
Ardından, MY_string_helper.php
in adlı bir dosya oluşturun application/helpers
ve basitçe işlevi, if
varlık kontrolü için tipik bir ifadeye ekleyin .
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
if (!function_exists('preDump')) {
function preDump() {
...
}
}
// DON'T CLOSE PHP
| VEYA |, farklı bir yöne gitmek istiyorsanız.
Aşağıdaki kod parçası yukarıdakiyle aynıdır ancak değişkenlerinizi tarayıcı konsolunda gösterecektir. Bu bazen sql nesne çağrılarında ve diğer dizi ve nesne çağrılarında, anahtar adını veya her neyse eksik olduğunuzda hata ayıklamayı kolaylaştırabilir.
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;
}
Her şeyle çalışır!
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>';
artı sıfır değer katan bir metindir.
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
eko 'pre' hariç ; var_dump`, simple html
çevresinde 0 değer ekleyen metin değil, bazılarıyla . lol kik. Beğenmediysen, kullanma. Sadece bir öneri.
PHP Array Beautifier Bu basit araç, PHP'de print_r () ifadesi gibi bir dizi veya nesne çıktısını alır ve verilerinizi kolayca okumak için renk kodlamasında biçimlendirir. http://phillihp.com/toolz/php-array-beautifier/
Yine bir başka yerli versiyon:
http://github.com/perchten/neat_html
Oldukça esnek olduğunu düşünmeyi seviyorum. Belirli bir çıktı ortamını hedeflemez, ancak çıktının / yazdırmanın veya davranışın neden değiştirileceğini ve bazı kalıcı ayarların neden değiştirileceğini belirtebileceğiniz bir dizi isteğe bağlı argümana sahiptir.
İşte bu sorunu çözmek için yazdığım bir krom uzantısı.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
Var_dumps'u güzelleştirmek için bir chrome uzantısı ve jquery eklentisi geliştirdim
PHP'de çok büyük dizilerle uğraşıyorsanız, bu işlev yardımcı olabilir:
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;
}
Temel olarak, her bir öğenin ayrı bir satırda olduğu tüm diziyi döker, bu da belirli öğeler için doğru tam yolları bulmakta faydalıdır.
Örnek çıktı:
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
Bakınız: Her anahtar / değer çiftinin ayrı satırda olduğu PHP dizisi nasıl dışa aktarılır?
Hiç kimsenin en kolay (çok hoş olmasa da) koddan bahsetmediğine şaşırdım. Sadece okunabilir bir çıktı (renk veya girinti olmadan) elde etmek istiyorsanız , aşağıdaki gibi <pre>
bir var_dump
çalışmanın etrafında basit bir :
echo "<pre>";
var_dump($myvariable);
echo "</pre>";
Bundan daha aşağı olamaz!
Krumo'ya benzer, ancak uygulamaya yerleştirmesi çok daha kolay olan küçük bir sınıf yazdım.
İşte bağlantı: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
Ve burada örnek çıktı: http://langpavel.php5.cz/debug_sample.html
Benim tercih edilir ayıklama gelen https://github.com/hazardland/debug.php olarak adlandırılan tek tek işlevi içeren kütüphane olan hata ayıklama (kütüphanenizle projenizde veya o işlevi kopyalamak sadece olabilir) . Tipik debug () html çıktısı şuna benzer:
Ancak, verileri aynı işleve sahip düz metin olarak da (4 boşluk girintili sekme ile) bunun gibi çıktılayabilirsiniz (ve hatta gerekirse dosyaya kaydedebilirsiniz):
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"
Bu, buggy PHP işlevinin yerini alması amaçlanan harika bir araçtır var_dump
ve print_r
karmaşık bir nesne yapısındaki özyinelemeli olarak referans verilen nesneleri doğru bir şekilde tanımlayabilir. Ayrıca, bazı özel değişkenlerin belirsiz yinelemeli gösterimini önlemek için yinelemeli derinlik kontrolüne sahiptir.
Bkz: TVarDumper.php
.
Döngüsel referanslara göre daha fazla avantaj sağlayan var_dump
ve print_r
destekleyebilen diğer alternatif çözümler için , lütfen kontrol edin: print_r ve var_dump'ı döngüsel referansla kullanma .
Daha fazla fikir için ayrıca kontrol edin: PHP betiklerinde nasıl hata ayıklayabilirsiniz?
Benimki daha basit, benim için altyapıyı değiştirmek için çok fazla bilgim / vaktim yok xdebug, vb.
Ve diğer durumlarda, örneğin basit bir WP web sitesine çok fazla ihtiyacınız yoktur.
Bu yüzden kullanıyorum:
highlight_string("\n<?" . var_export($var, true) . "?>\n");
bu bana gerçekten çok yardımcı oluyor.
ancak DevConsole Ortamını tercih ettiğim için bu harika ama basit işlevi kullanıyorum:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Küçük ayar:
<?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
Buraya başka bir cevap eklemek zorunda kaldım çünkü diğer çözümlerdeki adımları gerçekten uygulamak istemedim. Son derece basittir ve hiçbir uzantı gerektirmez, içerir vb ve tercih ettiğim şeydir. Çok kolay ve çok hızlı.
İlk önce söz konusu değişkeni json_encode:
echo json_encode($theResult);
Http://jsoneditoronline.org/ adresindeki JSON Düzenleyicisine aldığınız sonucu kopyalayın, sadece sol taraftaki bölmeye kopyalayın , Kopyala> ' yı tıklayın ve JSON'u gerçekten güzel bir ağaç biçiminde yazdırır.
Her biri için, ama umarım bu, bazılarının bir tane daha güzel seçeneği olmasına yardımcı olur! :)