Mỗi lập trình viên PHP giỏi đều có print_r
hoặc var_dump
trình bao bọc họ sử dụng, yêu thích và gán các phím tắt cho, tại sao chúng ta không chia sẻ những cái yêu thích của mình .
Mỗi lập trình viên PHP giỏi đều có print_r
hoặc var_dump
trình bao bọc họ sử dụng, yêu thích và gán các phím tắt cho, tại sao chúng ta không chia sẻ những cái yêu thích của mình .
Câu trả lời:
Một năm đầy đủ thời gian và lao động sau khi hỏi điều này, cuối cùng tôi đã mở ra phiên bản var_dump của mình, Kint. Đọc về nó trong trang dự án , hoặc trực tiếp trong github .
Đây là một ảnh chụp màn hình:
Xin lỗi cho phích cắm :)
EDIT: Tôi chỉ muốn nhắc nhở những người bình luận rằng đây không phải là một diễn đàn hỗ trợ, nếu bạn gặp vấn đề / muốn có một tính năng, vui lòng gửi một vấn đề . Hỗ trợ yêu cầu bình luận sẽ được gắn cờ để xóa.
Tôi thích nhất là var_dump
chức năng, như được cung cấp bởi tiện ích mở rộng Xdebug : chỉ cần cài đặt tiện ích mở rộng (dễ dàng, cả trên windows và Linux) và var_dump
nhận được đầu ra tốt hơn:
Và một ảnh chụp màn hình nhanh:
Và, tất nhiên, Xdebug mang đến vô số thứ hữu ích khác, như gỡ lỗi từ xa (ví dụ như gỡ lỗi đồ họa cho ứng dụng PHP của bạn, ví dụ trong PDT của Eclipse) , định hình, ...
Tôi đã viết riêng của mình: REF ( bản demo ):
Các kế hoạch là để thêm kết xuất chỉ văn bản và hiển thị thông tin về biểu thức nhập như Kint không ...
dll
tôi sẽ sử dụng "gỡ lỗi" này. Cảm ơn, và làm việc tốt!
Đây là của tôi, mà tôi sử dụng nội tuyến, rất hữu ích:
$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 là một hàm rất dài, nó xử lý tất cả các trường hợp cạnh của PHP (trong đó có LOTS) và ổn định 100%, mặc dù không thể đọc được. Nhưng vào cuối ngày, nếu bạn thấy việc triển khai của mình là tốt nhất cho bạn, đó là điều bạn chắc chắn nên sử dụng.
Bạn đang tìm kiếm Krumo ( Cảnh báo, cảnh báo Chrome cho Phần mềm độc hại ).
Nói một cách đơn giản, Krumo là sự thay thế cho print_r () và var_dump (). Theo định nghĩa, Krumo là một công cụ gỡ lỗi (ban đầu chỉ dành cho PHP4 / PHP5, giờ chỉ dành cho PHP5), hiển thị thông tin có cấu trúc về bất kỳ biến PHP nào.
Tôi đã sử dụng dBug, mô phỏng cfdump
thẻ tuyệt vời của Coldfusion :
Giải pháp (một phần) của tôi cho việc này chỉ đơn giản là thêm một chức năng như thế này (sử dụng Google Chrome):
<?
function console_dump($value)
{
?>
<script>
console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>
Nhấn Ctrl + Shift + J (mở giao diện điều khiển) và bạn có thể tìm thấy ở đó cấu trúc JSON. Thậm chí hữu ích hơn cho một bản in đẹp của các câu trả lời JSON.
Một ví dụ hoàn chỉnh về những gì tôi sử dụng ...
<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>
Đầu ra ...
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
Đây là của tôi:
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;
}
}
Tạo kiểu với:
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
lớp mà anh ta quên đăng và đặt chức năng trong đó.
Gần đây tôi đã phát triển một tiện ích mở rộng chrome miễn phí (đang hoạt động) để làm đẹp các bãi chứa var của tôi mà không có thư viện, không có thẻ trước và không cài đặt cho mỗi ứng dụng. Tất cả được thực hiện với JavaScript và regEx. Tất cả bạn phải làm là cài đặt phần mở rộng và tốt của bạn để đi. Tôi cũng đang làm việc trên một phiên bản Firefox. Đây là trang GitHub. Tôi hy vọng sẽ sớm có nó trên các trang web chrome và firefox!
https://github.com/alexnaspo/var_dumpling
Đây là một ví dụ đầu ra:
Tracy có một sản lượng thu lại đẹp sử dụng ) (dump chức năng .
Những thư viện ưa thích là tuyệt vời ... ngoại trừ chi phí. Nếu bạn muốn một var_dump đơn giản, đẹp, có tham số vô hạn, hãy thử chức năng của tôi. Nó thêm một số HTML đơn giản. Các thuộc tính dữ liệu cũng được thêm vào, nếu bạn sử dụng HTML5, các phiên bản thấp hơn sẽ bỏ qua chúng, nhưng giúp dễ dàng mở phần tử trong bảng điều khiển trình duyệt và nhận thêm một chút thông tin nếu những gì bạn thấy trên màn hình là không đủ.
Bố cục rất đơn giản, không có phí. Cung cấp một tấn thông tin cho từng tham số bao gồm những thứ như gettype
và thậm chí class
tên cho các bãi chứa Object (bao gồm cả XML). Nó đã được thử và đúng, tôi đã sử dụng nó trong nhiều năm.
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;
}
Và nếu bạn sử dụng Codeigniter, hãy thêm nó vào CÂU HỎI ĐƠN GIẢN. Đầu tiên, đi đến application/config/autoload.php
và chắc chắn rằng helper
'string'
là trên.
$autoload['helper'] = array( 'string' );
Sau đó chỉ cần đi tạo một file có tên MY_string_helper.php
trong application/helpers
và đơn giản chèn các chức năng trong một điển hình if
tuyên bố để kiểm tra sự tồn tại.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
if (!function_exists('preDump')) {
function preDump() {
...
}
}
// DON'T CLOSE PHP
| HOẶC |, nếu bạn muốn đưa nó theo một hướng khác.
Đoạn mã sau giống như trên, ngoại trừ sẽ hiển thị các biến của bạn trong bảng điều khiển trình duyệt. Điều này đôi khi có thể giúp dễ dàng gỡ lỗi các cuộc gọi đối tượng sql và các cuộc gọi mảng và đối tượng khác khi bạn thiếu tên khóa hoặc bất cứ điều gì.
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;
}
Làm việc với tất cả mọi thứ!
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>';
cộng với một số văn bản thêm giá trị không.
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
tiếng vang 'pre'; var_dump` với một số simple html
xung quanh nó, không phải văn bản thêm 0 giá trị. lol kik. Nếu bạn không thích nó, đừng sử dụng nó. Chỉ là một gợi ý.
Công cụ làm đẹp mảng PHP Công cụ đơn giản này lấy một mảng hoặc đối tượng đầu ra trong PHP, chẳng hạn như câu lệnh print_r () và định dạng nó trong mã màu để dễ dàng đọc dữ liệu của bạn. http://phillihp.com/toolz/php-array-beautifier/
Một phiên bản trồng tại nhà khác:
http://github.com/perchten/neat_html
Tôi thích nghĩ rằng nó khá linh hoạt. Nó không nhắm đến môi trường đầu ra cụ thể nhưng có một loạt các đối số tùy chọn mà bạn có thể chỉ định tại sao thay đổi đầu ra / in hoặc hành vi, cũng như một số cài đặt liên tục.
Đây là một phần mở rộng chrome mà tôi đã viết để giải quyết vấn đề này.
https://chrom.google.com.vn/webstore/detail/varmasterunch/chfhddogiigmfpkcmgfpolalagdcamkl
Tôi đã phát triển một tiện ích mở rộng chrome và plugin jquery để làm đẹp var_dumps
Nếu bạn đang xử lý các mảng rất lớn trong PHP, chức năng này có thể giúp:
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;
}
Về cơ bản, nó kết xuất toàn bộ mảng trong đó mỗi phần tử nằm trong một dòng riêng biệt, điều này có lợi để tìm đúng đường dẫn đầy đủ cho các phần tử nhất định.
Ví dụ đầu ra:
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
Xem: Làm thế nào để xuất mảng PHP trong đó mỗi cặp khóa-giá trị nằm trong một dòng riêng biệt?
Tôi ngạc nhiên không ai đề cập đến mã dễ nhất (mặc dù không đẹp lắm). Nếu bạn chỉ muốn có được một đầu ra có thể đọc được (không có màu sắc hoặc thụt đầu dòng), thì đơn giản <pre>
xung quanh một var_dump
tác phẩm, như trong:
echo "<pre>";
var_dump($myvariable);
echo "</pre>";
Không thể có được chi phí thấp hơn nhiều so với điều này!
Tôi đã viết một lớp nhỏ tương tự như Krumo, nhưng dễ dàng hơn để nhúng vào ứng dụng.
Đây là liên kết: https://github.com/langpavel/PhpSkelet/blob/master/Class/Debug.php
Và ở đây đầu ra mẫu: http://langpavel.php5.cz/debug_sample.html
Sở thích của tôi là gỡ lỗi từ https://github.com/hazardland/debug.php là thư viện chỉ chứa một hàm duy nhất có tên là gỡ lỗi (Bạn chỉ có thể sao chép chức năng đó trong dự án hoặc trong thư viện của mình) . Đầu ra html gỡ lỗi () điển hình trông như thế này:
Nhưng bạn có thể xuất dữ liệu dưới dạng văn bản đơn giản với cùng chức năng (với 4 tab được thụt vào không gian) như thế này (và thậm chí đăng nhập nó trong tệp nếu cần):
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"
Đây là một công cụ tuyệt vời nhằm thay thế hàm PHP bị lỗi var_dump
và print_r
vì nó có thể xác định chính xác các đối tượng được tham chiếu đệ quy trong một cấu trúc đối tượng phức tạp. Nó cũng có một điều khiển độ sâu đệ quy để tránh hiển thị đệ quy không xác định của một số biến đặc thù.
Xem : TVarDumper.php
.
Đối với các giải pháp thay thế khác cung cấp nhiều lợi thế hơn var_dump
và print_r
có thể hỗ trợ các tham chiếu vòng tròn, vui lòng kiểm tra: Sử dụng print_r và var_dump với tham chiếu vòng tròn .
Để biết thêm ý tưởng, hãy kiểm tra thêm: Làm thế nào để bạn gỡ lỗi các tập lệnh PHP?
Của tôi, đơn giản hơn, đối với tôi, tôi không có nhiều kiến thức / thời gian để thay đổi cơ sở hạ tầng cài đặt xdebug, v.v.
Và trong các trường hợp khác, bạn không cần nhiều cho một trang web WP đơn giản chẳng hạn
Vì vậy, tôi sử dụng:
highlight_string("\n<?" . var_export($var, true) . "?>\n");
Điều đó thực sự giúp tôi rất nhiều.
nhưng vì tôi thích Môi trường DevConsole nên tôi sử dụng chức năng đơn giản nhưng tuyệt vời này:
https://codeinphp.github.io/post/outpocking-php-to-browser-console/
Tinh chỉnh nhỏ:
<?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
Tôi đã phải thêm một câu trả lời ở đây vì tôi không thực sự muốn trải qua các bước trong các giải pháp khác. Nó cực kỳ đơn giản và không yêu cầu mở rộng, bao gồm vv và là những gì tôi thích. Nó rất dễ dàng và rất nhanh.
Đầu tiên chỉ cần json_encode biến trong câu hỏi:
echo json_encode($theResult);
Sao chép kết quả mà bạn nhận được vào Trình soạn thảo JSON tại http://jsoneditoronline.org/ chỉ cần sao chép nó vào khung bên trái, nhấp vào Sao chép> và nó sẽ in JSON theo định dạng cây rất đẹp.
Với mỗi người, nhưng hy vọng điều này sẽ giúp một số người khác có thêm một lựa chọn tốt đẹp! :)