先进的VarDumper组件的使用

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

先进的VarDumper组件的使用

dump ()函数是一个瘦包装器和一个更加方便的方式来调用VarDumper:转储()。你可以改变这个函数通过调用的行为VarDumper: setHandler(可赎回美元)。调用dump ()将被转发到吗美元可调用的

通过添加一个处理程序,您可以定制切割,矿用汽车脚轮如下解释。处理函数的一个简单的实现可能会看起来像这样:

1 2 3 4 5 6 7 8 9 10 11
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\HtmlDumper;使用欧宝娱乐app下载地址\组件\VarDumper\VarDumper;VarDumper::setHandler (函数(美元var){美元切割=VarCloner ();美元自动倾卸车=“cli”= = = PHP_SAPI ?CliDumper ():HtmlDumper ();美元自动倾卸车- >转储(美元切割- >cloneVar (美元var));});

切割

切割是用来创建一个中间表示任何PHP变量。它的输出是一个数据对象,该对象将封装这种表示方法。

您可以创建一个数据对象:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;美元切割=VarCloner ();美元数据=美元切割- >cloneVar (美元myvar#);/ /这是一般然后传递给清洁工人/ /查看这个页面的顶部/ / $翻车机- >转储(元数据);

不管克隆的数据结构,产生的数据对象都是可序列化的。

切割适用限制在创建表示,这只能代表一个克隆的变量的一个子集。在调用之前cloneVar ()您可以配置这些限制:

setMaxItems ()
配置项的最大数量将克隆过去的最小嵌套深度。项数使用广度优先算法,这样低水平项目比深层嵌套的优先项目。指定1消除了极限。
setMinDepth ()
配置的最小树深度我们保证克隆的所有项目。达到这个深度后,只有setMaxItems项目将克隆。默认值是1,这是与旧的Symfony版本一致。欧宝娱乐app下载地址
setMaxString ()
配置的最大字符数,将克隆在切割之前太长的字符串。指定1消除了极限。

在倾销它之前,您可以进一步限制所产生的数据对象使用以下方法:

withMaxDepth ()
深度尺寸限制转储。
withMaxItemsPerDepth ()
限制了每级深度的项的数量。
withRefHandles ()
删除内部对象的处理稀疏的输出(用于测试)。
寻求()
只选择的时候已经克隆数组、对象或资源。

不同于先前的限制切割,故意删除数据,这些可以改变之前来回倾倒,因为它们不影响内部中间表示。

请注意

当没有限制,数据对象是本机一样准确序列化以外的函数,因此可以用于调试。

矿用汽车

翻车机负责输出的字符串表示一个PHP变量,使用数据对象作为输入。目的地的格式化输出随矿用汽车。

此组件提供了一个HtmlDumperHTML输出和一个CliDumper为可选颜色的命令行输出。

例如,如果你想抛弃一些$变量做:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;美元切割=VarCloner ();美元自动倾卸车=CliDumper ();美元自动倾卸车- >转储(美元切割- >cloneVar (美元变量));

通过使用构造函数的第一个参数,您可以选择输出流写入转储。默认情况下,CliDumper写在php: / / stdoutHtmlDumperphp: / /输出。但任何PHP流(资源或URL)是可以接受的。

而不是流的目的地,你也可以通过它可调用的将多次呼吁每一行由一个垃圾场。这可调用可以配置使用一个赌徒的构造函数的第一个参数,而且使用setOutput ()方法的第二个参数dump ()方法。

例如,要获取转储为字符串变量,你能做什么:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;美元切割=VarCloner ();美元自动倾卸车=CliDumper ();美元输出=;美元自动倾卸车- >转储(美元切割- >cloneVar (美元变量),函数(美元,美元深度)使用(&美元输出){/ /负面深度意味着“转储的终结”如果(美元深度> =0){/ /添加一个两个空格缩进美元输出=函数。' ',美元深度)。美元“\ n”;}});/ /输出现在的美元抛售美元表示的变量

做同样的的另一个选择可能是:

1 2 3 4 5 6 7 8 9 10 11
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;美元切割=VarCloner ();美元自动倾卸车=CliDumper ();美元输出= fopen (“php: / /记忆”,“r + b”);美元自动倾卸车- >转储(美元切割- >cloneVar (美元变量),美元输出);美元输出= stream_get_contents (美元输出,1,0);/ /输出现在的美元抛售美元表示的变量

提示

你可以通过真正的的第二个参数dump ()方法让它返回转储为字符串:

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

矿用汽车实现DataDumperInterface接口,指定了转储(元数据)方法。通常他们也实现了DumperInterface,让他们重新实现逻辑需要走过数据对象的内部结构。

HtmlDumper默认使用一个黑暗的主题。使用setTheme ()方法用浅色的主题:

1 2
/ /……美元htmlDumper- >setTheme (“光”);

HtmlDumper限制输出的字符串长度和嵌套深度使其更具可读性。这些选项可以覆盖的第三个可选参数转储(元数据)方法:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\HtmlDumper;美元输出= fopen (“php: / /记忆”,“r + b”);美元自动倾卸车=HtmlDumper ();美元自动倾卸车- >转储(美元var,美元输出,(/ / 1和160是这些选项的默认值“maxDepth”= >1,“maxStringLength”= >160年]);

翻车机的输出格式可以细调两个旗帜DUMP_STRING_LENGTHDUMP_LIGHT_ARRAY这是作为位图在第三个构造函数传递参数。他们也可以通过设置环境变量在使用assertDumpEquals(过滤器,美元抛售美元,美元数据,消息)在单元测试。

美元的过滤器的观点assertDumpEquals ()可以用来传递一个位域的施法者:EXCLUDE_ *常量和影响产生的预期输出不同的脚轮。

如果DUMP_STRING_LENGTH设置,然后旁边显示一个字符串的长度是它的内容:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\AbstractDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;美元varCloner=VarCloner ();美元var= (“测试”];美元自动倾卸车=CliDumper ();回声美元自动倾卸车- >转储(美元varCloner- >cloneVar (美元var),真正的);/ /数组:1 (/ / 0 = >“测试”/ /)美元自动倾卸车=CliDumper (,,AbstractDumper::DUMP_STRING_LENGTH);回声美元自动倾卸车- >转储(美元varCloner- >cloneVar (美元var),真正的);/ /(前添加字符串长度字符串)/ /数组:1 (/ / 0 = > (4)“测试”/ /)

如果DUMP_LIGHT_ARRAY设置,那么数组是倾倒在缩短格式类似于PHP的简单数组表示法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\AbstractDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;美元varCloner=VarCloner ();美元var= (“测试”];美元自动倾卸车=CliDumper ();回声美元自动倾卸车- >转储(美元varCloner- >cloneVar (美元var),真正的);/ /数组:1 (/ / 0 = >“测试”/ /)美元自动倾卸车=CliDumper (,,AbstractDumper::DUMP_LIGHT_ARRAY);回声美元自动倾卸车- >转储(美元varCloner- >cloneVar (美元var),真正的);/ /(没有更多的数组:1前缀)/ / (/ / 0 = >“测试”/ /)

如果你想使用这两个选项,你可以把它们用逻辑或运算符|:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\AbstractDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;美元varCloner=VarCloner ();美元var= (“测试”];美元自动倾卸车=CliDumper (,,AbstractDumper::DUMP_STRING_LENGTH | AbstractDumper::DUMP_LIGHT_ARRAY);回声美元自动倾卸车- >转储(美元varCloner- >cloneVar (美元var),真正的);/ / (/ / 0 = > (4)“测试”/ /)

脚轮

对象和资源嵌套在一个PHP变量数组中间的“演员”数据表示。您可以自定义的数组表示每个对象/资源通过连接一个施法者到这个过程。组件已经包括许多脚轮为基地的PHP类和其他常见类。

如果你想建立自己的施法者,你可以注册一个之前克隆一个PHP变量。施法者使用切割的构造函数或其注册addCasters ()方法:

1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;美元myCasters= […];美元切割=VarCloner (美元myCasters);/ /或美元切割- >addCasters (美元myCasters);

所提供的myCasters美元参数是一个数组映射一个类,一个接口或一个可调用的资源类型:

1 2 3 4
美元myCasters= (“FooClass”= >美元myFooClassCallableCaster,“:酒吧资源”= >美元myBarResourceCallableCaster,);

你可以注意到,资源类型由一个前缀:防止碰撞与一个类名。

因为一个对象有一个主类和潜在许多父类或接口,许多脚轮可以应用于一个对象。在这种情况下,施法者被称为一个接一个,从施法者绑定到接口,然后父母类和主类。几个施法者也可以注册相同的资源类型/类/接口。他们被称为登记顺序。

脚轮是负责返回对象的属性或资源被克隆数组中。他们可调用的,接受5个参数:

  • 对象或资源转化;
  • PHP的本机后数组对象的建模(数组)把操作符;
  • 一个存根对象代表的主要属性对象(类、类型等);
  • 真/假当施法者被称为嵌套结构;
  • 有些领域的施法者::EXCLUDE_ *常量。

这是一个简单的施法者不做任何:

1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\VarDumper\切割\存根;函数myCaster(美元对象,美元数组,存根美元存根,美元isNested,美元过滤器){/ /……填充/改变数组美元您的需求返回美元数组;}

对于对象,美元的数组参数是使用PHP的本地预填充(数组)铸造运营商或的返回值$对象- > __debugInfo ()如果魔术方法存在。然后,给出了一个施法者的返回值作为数组参数链中的下一个施法者。

当铸件(数组)运营商,PHP前缀属性与保护\ \ 0 * 0拥有财产和私有的类。例如,\ 0 foobar \ 0将所有私人的前缀Foobar类型的对象的属性。脚轮按照本公约,并添加两个前缀:0 ~ \ \ 0用于虚拟属性和\ 0 + \ 0动态的(运行时添加属性的类声明)。

请注意

虽然可以,但建议不改变对象的状态,而铸造施法者。

提示

在编写自己的脚轮之前,您应该检查现有的。

添加与元数据语义

因为施法者是沉迷于特定的类或接口,他们知道他们操作的对象。通过改变美元的存根对象(任何施法者的第三个参数),可以将这些知识传输给结果数据对象,从而矿用汽车。帮你做这个(见它是如何工作的源代码),包装的组件附带了一组常见的附加的语义。您可以使用:

  • 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
使用欧宝娱乐app下载地址\组件\VarDumper\施法者\LinkStub;使用欧宝娱乐app下载地址\组件\VarDumper\切割\存根;函数ProductCaster(产品美元对象,美元数组,存根美元存根,美元isNested,美元过滤器=0){美元数组(“手册”]=LinkStub (美元数组(“手册”]);返回美元数组;}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。