vardump组件的高级用法
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.7,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
vardump组件的高级用法
的dump ()
函数只是一个简单的包装器,是一种更方便的调用方式VarDumper:转储().您可以通过调用更改此函数的行为VarDumper: setHandler(可赎回美元).调用dump ()
会转发到美元可调用的
.
通过添加处理程序,可以自定义切割,矿用汽车而且脚轮如下所述。处理函数的简单实现可能是这样的:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\VarDumper\VarDumper;使用ob娱乐下载\组件\VarDumper\切割\VarCloner;使用ob娱乐下载\组件\VarDumper\自动倾卸车\CliDumper;使用ob娱乐下载\组件\VarDumper\自动倾卸车\HtmlDumper;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 ()
- 配置克隆的最大项数超过了第一个嵌套层.项目使用宽度优先算法进行计数,因此较低级别的项目比深嵌套的项目具有更高的优先级;
- 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这使他们不必重新实现遍历对象所需的逻辑数据对象的内部结构。
脚轮
嵌套在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。
这是一个简单的施法者没有做任何事情:
1 2 3 4 5 6
函数myCaster($对象,$数组,$存根,$isNested){/ /……填充/修改$数组到您的需要返回$数组;}
对于对象,美元的数组
参数使用PHP的本机预填充(数组)
强制转换运算符或返回值为对象- > __debugInfo ()
如果神奇的方法存在的话。然后,将一个Caster的返回值作为数组参数提供给链中的下一个Caster。
当使用(数组)
操作符,PHP在受保护的属性前加上\ \ 0 * 0
还有私有类拥有该属性。例如,\ 0 foobar \ 0
将是Foobar类型对象的所有私有属性的前缀。Casters遵循这一惯例,并添加了两个前缀:0 ~ \ \ 0
是用于虚拟财产和\ 0 + \ 0
对于动态的(运行时添加的属性不在类声明中)。
请注意
虽然可以,但建议不要在Caster中强制转换对象时更改对象的状态。
提示
在编写自己的脚轮之前,您应该检查现有的脚轮。