assad2008 / dump-r
一个更简洁、更轻量级的 print_r() 和 var_dump() 的混合体
Requires
- php: >=5.4.0
Suggests
- jdorn/sql-formatter: Pretty-print dumped SQL strings
This package is auto-updated.
Last update: 2024-09-22 04:17:47 UTC
README
一个更简洁、更轻量级的 print_r()
和 var_dump()
的混合体 (MIT 许可证)
演示: http://o-0.me/dump_r/
安装
Composer
https://packagist.org.cn/packages/leeoniya/dump-r
{ "require": { "leeoniya/dump-r": "dev-master" } }
需求
require 'dump_r.php';
使用 & 配置
使用 dump_r()
作为 print_r()
和 var_dump()
的替代品。它有一些额外的参数来控制输出。函数的完整签名是
function dump_r($value, $return = false, $html = true, $depth = 1e3, $expand = 1e3);
$value
是你想输出的内容$return
决定是否返回输出而不是输出到屏幕$html
控制输出是文本还是 html$depth
设置输出的递归限制$expand
设置自动展开的子节点深度
还有两个修改键可以用来控制节点展开/折叠的工作方式
- 按住
Shift
在切换时将展开/折叠节点的全部深度。 - 按住
Ctrl
在切换时也会展开/折叠该节点之后的所有同级节点。如果你有一个对象/数组数组,并且想要通过点击组中的第一个来同时展开它们到同一级别,这将非常有用。这对于深度复杂对象效果很好。 Shift
和Ctrl
可以同时使用。
双击二进制字符串将在混合十六进制/ascii 和仅十六进制表示之间切换
某些类型的字符串可以进行美化打印,并且可以调整额外的渲染选项(默认显示)
dump_r\Rend::$xml_pretty = false; // pretty-print xml strings dump_r\Rend::$json_pretty = false; // pretty-print json strings dump_r\Rend::$sql_pretty = false; // pretty-print sql strings (requires https://github.com/jdorn/sql-formatter) dump_r\Rend::$recset_tbls = true; // recordset detection & table-style output dump_r\Rend::$trace_info = true; // show file & line where dump_r was invoked dump_r\Rend::$val_space = 4; // number of spaces between key and value columns (affects text output only, not html)
循环引用(递归)检测和重复输出分别用以下方式表示数组、对象、闭包和资源:[*]
、{*}
、(*)
、<*>
。
你可以使用 CSS 重新设计 html 输出的所有方面,所有内容都带有类标签。
扩展
添加自己的分类器 & 解析器非常简单。以下是如何对 String
基类型进行子类型化的说明和两个具体示例。首先是为显示 jpeg
和 tiff
图像路径的 EXIF 数据,然后是显示 CSV 文件路径的行数据。
这个数组
$stuff = [ 'imgs/img_1771.jpg', 'data/people.csv', ];
通常会像这样输出
可以通过子类型化以这种方式输出
为此,钩接正确的核心类型并提供一个分类和处理原始值的函数,然后修改并返回一个 Type
实例。以下是可以修改/增强的属性
$type->types
- 您选择的子类型字符串数组。这些将作为 CSS 类添加,并且也会显示在内联中。$type->nodes
- 要显示的可展开子节点数组。如果不需要子节点或要保留由核心类型提取的任何子节点,请提供null
。$type->length
- 要显示在行末的字符串,表示子节点长度。您也可以利用此参数显示其他类似长度的信息(下面的 EXIF 示例使用它来显示内联图像尺寸)。要保留钩接核心类型的默认长度显示,请提供null
。
use dump_r\Type; // Example 1: dump EXIF data with image filepath strings Type::hook('_String', function($raw, Type $type, $path) { // match path-esque strings (containing '/' or '\') trailed by an // EXIF-capable image extension, then verify this file actually exists if (preg_match('#[\/]+.+\.(jpe?g|tiff?)$#', $raw) && is_file($raw)) { $nodes = $exif = exif_read_data($raw, 0, true); $len = $exif['COMPUTED']['Width'] . 'x' . $exif['COMPUTED']['Height']; $type->types = ['image']; $type->nodes = ['EXIF' => $nodes['EXIF']]; $type->length = $len; return $type; } }); // Example 2: dump CSV records with csv filepath strings Type::hook('_String', function($raw, Type $type, $path) { if (preg_match('#[\/]+.+\.csv$#', $raw) && is_file($raw)) { $type->types = ['csv']; $type->nodes = csv2array($raw); $type->length = count($type->nodes); return $type; } }); function csv2array($file) { $csv = []; $rows = array_map('str_getcsv', file($file)); $header = array_shift($rows); foreach ($rows as $row) $csv[] = array_combine($header, $row); return $csv; }
所有核心类型(请参阅 src/dump_r/Node
目录)都可以通过它们的完全命名空间名称进行钩接。例如,如果您想进一步子类型化 JSON 对象字符串,您将使用
Type::hook('_String\\_JSON\\_Object', function($raw, Type $type, $path) { // code here });
过滤、标记 & 递归控制
使用上面介绍的相同 Type
钩子可以修改渲染器和迭代器的其他方面。
根据节点属性或层次结构中的路径跳过特定的节点
// prevent anything keyd under 'xxx' from dumping Type::hook('*', function($raw, Type $type, $path) { if (end($path) === 'xxx') return false; });
停止特定节点的递归
// prevent arrays keyed under 'c' from dumping sub-nodes Type::hook('_Array', function($raw, Type $type, $path) { if (end($path) === 'c') $type->depth = 1; return $type; });
通过类标签节点
// tag nodes keyed under `yyy` with addl CSS classes Type::hook('*', function($raw, Type $type, $path) { if (end($path) === 'yyy') { $type->classes[] = 'marked'; } return $type; });