vardump组件的高级用法

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

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娱乐下载组件VarDumperVarDumper;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 ()
为更稀疏的输出删除内部对象的句柄(对测试有用)。
寻求()
只选择已经克隆的数组、对象或资源的子部分。

与之前对克隆程序故意删除数据的限制不同,这些限制可以在转储之前来回更改,因为它们不会在内部影响中间表示。

请注意

当不应用限制时,a数据对象与本机对象一样准确序列化函数,因此可以用于调试以外的目的。

矿用汽车

转储器负责输出PHP变量的字符串表示形式,使用数据对象作为输入。该输出的目标和格式因转储器而异。

该组件带有HtmlDumper用于HTML输出和CliDumper用于可选着色的命令行输出。

例如,如果你想倾倒一些$变量做:

1 2 3 4 5 6 7
使用ob娱乐下载组件VarDumper切割VarCloner使用ob娱乐下载组件VarDumper自动倾卸车CliDumper切割VarCloner ();自动倾卸车CliDumper ();自动倾卸车->转储(切割->cloneVar (变量));

通过使用构造函数的第一个参数,可以选择将要写入转储的输出流。默认情况下,CliDumper写在php: / / stdoutHtmlDumperphp: / /输出.但是任何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 (输出-10);// $output现在用$variable的转储表示填充

提示

你可以通过真正的的第二个参数dump ()方法,使其以字符串形式返回转储:

1
输出自动倾卸车->转储(切割->cloneVar (变量),真正的);

转储器实现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自动倾卸车CliDumpervarClonerVarCloner ();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自动倾卸车CliDumpervarClonerVarCloner ();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自动倾卸车CliDumpervarClonerVarCloner ();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切割VarClonermyCasters=[…];切割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 (数组“手册”]);返回数组;}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。