vardump组件的高级用法
编辑本页vardump组件的高级用法
的dump ()
函数只是一个简单的包装器,是一种更方便的调用方式VarDumper:转储().您可以通过调用更改此函数的行为VarDumper: setHandler(可赎回美元).调用dump ()
会转发到美元可调用的
.
通过添加处理程序,可以自定义切割,矿用汽车而且脚轮如下所述。处理函数的简单实现可能是这样的:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;使用ob娱乐下载\组件\VarDumper\自动倾卸车\HtmlDumper;使用ob娱乐下载\组件\VarDumper\VarDumper;VarDumper::setHandler (函数($var){$切割=新VarCloner ();$自动倾卸车=“cli”=== php_sapi ?新CliDumper ():新HtmlDumper ();$自动倾卸车->转储($切割->cloneVar ($var));});
切割
克隆程序用于创建任何PHP变量的中间表示。它的输出是a数据对象,该对象包装此表示形式。
您可以创建数据
对象是这样的:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;$切割=新VarCloner ();$数据=$切割->cloneVar ($myvar#);//这通常被传递给转储器//查看本页顶部的示例/ /自动倾卸车- >转储(元数据);
无论克隆的数据结构是什么数据
对象总是可序列化的。
克隆程序在创建表示时应用限制,因此只能表示克隆变量的一个子集。在调用之前cloneVar (),你可以配置这些限制:
- setMaxItems ()
-
配置克隆的最大项数超过最小嵌套深度.项使用宽度优先算法进行计数,因此较低级别的项比深嵌套的项具有更高的优先级。指定
-1
移除限制。 - setMinDepth ()
-
配置保证克隆所有项的最小树深度。在达到此深度后,仅
setMaxItems
项目将被克隆。默认值为1
,这与旧的Symfony版本一致。ob娱乐下载 - setMaxString ()
-
配置在剪切过长的字符串之前克隆的最大字符数。指定
-1
移除限制。
在转储之前,您可以进一步限制结果数据对象,使用以下方法:
- withMaxDepth ()
- 在深度维度中限制转储。
- withMaxItemsPerDepth ()
- 限制每个深度级别的项数。
- withRefHandles ()
- 为更稀疏的输出删除内部对象的句柄(对测试有用)。
- 寻求()
- 只选择已经克隆的数组、对象或资源的子部分。
与之前对克隆程序故意删除数据的限制不同,这些限制可以在转储之前来回更改,因为它们不会在内部影响中间表示。
矿用汽车
转储器负责输出PHP变量的字符串表示形式,使用数据对象作为输入。该输出的目标和格式因转储器而异。
该组件带有HtmlDumper用于HTML输出和CliDumper用于可选着色的命令行输出。
例如,如果你想倾倒一些$变量
做:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;$切割=新VarCloner ();$自动倾卸车=新CliDumper ();$自动倾卸车->转储($切割->cloneVar ($变量));
通过使用构造函数的第一个参数,可以选择将要写入转储的输出流。默认情况下,CliDumper
写在php: / / stdout
和HtmlDumper
在php: / /输出
.但是任何PHP流(资源或URL)都是可以接受的。
除了流目的地,您还可以传递一个可调用的
转储器生成的每一行都将重复调用。这个可调用对象可以使用转储器构造函数的第一个参数配置,也可以使用setOutput ()方法的第二个参数dump ()方法。
例如,在变量中以字符串的形式获取转储,你可以这样做:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;$切割=新VarCloner ();$自动倾卸车=新CliDumper ();$输出=”;$自动倾卸车->转储($切割->cloneVar ($变量),函数($行,$深度)使用(&$输出){//一个负深度表示dump的结束如果($深度> =0) {//为该行添加两个空格缩进$输出=函数。' ',$深度).$行.“\ n”;}});// $output现在用$variable的转储表示填充
做同样事情的另一个选择是:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;$切割=新VarCloner ();$自动倾卸车=新CliDumper ();$输出= fopen (“php: / /记忆”,“r + b”);$自动倾卸车->转储($切割->cloneVar ($变量),$输出);$输出= stream_get_contents ($输出,-1,0);// $output现在用$variable的转储表示填充
转储器实现DataDumperInterface接口,它指定转储(元数据)方法。它们通常还实现DumperInterface这使他们不必重新实现遍历对象所需的逻辑数据对象的内部结构。
的HtmlDumper默认使用黑色主题。使用setTheme ()使用浅色主题的方法:
1 2
/ /……$htmlDumper->setTheme (“光”);
的HtmlDumper限制输出的字符串长度和嵌套深度,使其更具可读性。属性的第三个可选参数可以覆盖这些选项转储(元数据)方法:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\VarDumper\自动倾卸车\HtmlDumper;$输出= fopen (“php: / /记忆”,“r + b”);$自动倾卸车=新HtmlDumper ();$自动倾卸车->转储($var,$输出, (// 1和160是这些选项的默认值“maxDepth”= >1,“maxStringLength”= >160]);
转储器的输出格式可以通过这两个标志进行微调DUMP_STRING_LENGTH
而且DUMP_LIGHT_ARRAY
在第三个构造函数参数中作为位图传递。它们也可以在使用时通过环境变量进行设置assertDumpEquals($dump, $data, $filter, $message)在单元测试期间。
的美元的过滤器
的观点assertDumpEquals ()
可以用来传位场的吗施法者:EXCLUDE_ *
常量,并影响由不同的脚轮产生的预期输出。
如果DUMP_STRING_LENGTH
,则字符串的长度将显示在其内容旁边:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\AbstractDumper;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;$varCloner=新VarCloner ();$var= (“测试”];$自动倾卸车=新CliDumper ();回声$自动倾卸车->转储($varCloner->cloneVar ($var),真正的);//数组:1 [// 0 => "test"/ /)$自动倾卸车=新CliDumper (零,零, AbstractDumper::DUMP_STRING_LENGTH);回声$自动倾卸车->转储($varCloner->cloneVar ($var),真正的);//(在字符串前面添加字符串长度)//数组:1 [// 0 => (4)“测试”/ /)
如果DUMP_LIGHT_ARRAY
,然后数组以类似于PHP的短数组表示法的缩短格式转储:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\AbstractDumper;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;$varCloner=新VarCloner ();$var= (“测试”];$自动倾卸车=新CliDumper ();回声$自动倾卸车->转储($varCloner->cloneVar ($var),真正的);//数组:1 [// 0 => "test"/ /)$自动倾卸车=新CliDumper (零,零, AbstractDumper::DUMP_LIGHT_ARRAY);回声$自动倾卸车->转储($varCloner->cloneVar ($var),真正的);//(没有更多的数组:1前缀)/ / (// 0 => "test"/ /)
如果您想同时使用这两个选项,那么可以使用逻辑OR运算符将它们组合起来|
:
12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\AbstractDumper;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;$varCloner=新VarCloner ();$var= (“测试”];$自动倾卸车=新CliDumper (零,零, AbstractDumper::DUMP_STRING_LENGTH | abstractdump::DUMP_LIGHT_ARRAY);回声$自动倾卸车->转储($varCloner->cloneVar ($var),真正的);/ / (// 0 => (4)“测试”/ /)
脚轮
嵌套在PHP变量中的对象和资源被“强制转换”为中间的数组数据表示。您可以通过将Caster钩子到该进程中来定制每个对象/资源的数组表示。该组件已经包含了许多用于基本PHP类和其他公共类的脚轮。
如果您想构建自己的Caster,可以在克隆PHP变量之前注册一个Caster。施法者使用克隆者的构造函数或克隆者的构造函数注册addCasters ()
方法:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\VarDumper\切割\VarCloner;$myCasters=[…];$切割=新VarCloner ($myCasters);/ /或$切割->addCasters ($myCasters);
所提供的myCasters美元
参数是一个数组,将类、接口或资源类型映射到可调用对象:
1 2 3 4
$myCasters= (“FooClass”= >$myFooClassCallableCaster,“:酒吧资源”= >$myBarResourceCallableCaster,);
您可以注意到,资源类型的前缀是a:
防止与类名发生冲突。
因为一个对象有一个主类和潜在的许多父类或接口,所以可以对一个对象应用多个施法者。在这种情况下,从绑定到接口的脚轮开始,依次调用父类和主类。还可以为相同的资源类型/类/接口注册多个脚轮。它们是按登记顺序命名的。
施法者负责返回数组中被克隆的对象或资源的属性。它们是接受五个参数的可调用对象:
- 被强制转换的对象或资源;
- 以PHP的原生对象为对象建模的数组
(数组)
把操作符; - 一个存根表示对象的主要属性(类、类型等)的对象;
- 当施法者在结构中是否被称为嵌套时为True /false;
- 有点领域施法者
:: EXCLUDE_ *
常量。
这是一个简单的施法者没有做任何事情:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\VarDumper\切割\存根;函数myCaster($对象,$数组,存根$存根,$isNested,$过滤器){/ /……填充/修改$数组到您的需要返回$数组;}
对于对象,美元的数组
参数使用PHP的本机预填充(数组)
强制转换运算符或返回值为对象- > __debugInfo ()
如果神奇的方法存在的话。然后,将一个Caster的返回值作为数组参数提供给链中的下一个Caster。
当使用(数组)
操作符,PHP在受保护的属性前加上\ \ 0 * 0
还有私有类拥有该属性。例如,\ 0 foobar \ 0
将是Foobar类型对象的所有私有属性的前缀。Casters遵循这一惯例,并添加了两个前缀:0 ~ \ \ 0
是用于虚拟财产和\ 0 + \ 0
对于动态的(运行时添加的属性不在类声明中)。
请注意
虽然可以,但建议不要在Caster中强制转换对象时更改对象的状态。
提示
在编写自己的脚轮之前,您应该检查现有的脚轮。
用元数据添加语义
由于施法者依赖于特定的类或接口,因此它们知道所操作的对象。通过改变美元的存根
对象(任意施法者的第三个参数),可以将此知识转移到结果数据
对象,因此对倾倒者。为了帮助您做到这一点(请参阅源代码了解它的工作原理),该组件附带了一组用于通用附加语义的包装器。你可以使用:
- ConstStub包装PHP常量最能表示的值;
- ClassStub来包装PHP标识符(即。类名,方法名,接口,等。);
- CutStub替换大噪声对象/字符串/等。通过椭圆;
- CutArrayStub只保留数组中一些有用的键;
- ImgStub包装一个图像;
- EnumStub要包装一组虚拟值(即。在原始PHP数据结构中不存在的属性值,但值得与真实值一起列出);
- LinkStub包装可以被转储器转换为链接的字符串;
- TraceStub和他们的
- FrameStub而且
- ArgsStub亲戚来包装PHP跟踪(由ExceptionCaster).
例如,如果你知道你的产品
对象具有宣传册
属性保存文件名或URL时,可以将它们包装在LinkStub
告诉HtmlDumper
要使它们可点击:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\VarDumper\施法者\LinkStub;使用ob娱乐下载\组件\VarDumper\切割\存根;函数ProductCaster(产品$对象,$数组,存根$存根,$isNested,$过滤器=0){$数组[“手册”] =新LinkStub ($数组[“手册”]);返回$数组;}