vardump组件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.4,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

vardump组件

vardump组件提供了从任何PHP变量中提取状态的机制。建立在上面,它提供了一个更好的dump ()函数,可以用来代替var_dump

安装

1
编译器需要——开发symfony/var du欧宝娱乐app下载地址mp:^3.4

请注意

如果在Symfony应用程序外部安装此组件,则必须要求欧宝娱乐app下载地址供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

请注意

如果在Symfony应用程序中使用它,请确欧宝娱乐app下载地址保在您的应用程序中启用DebugBundleapp / AppKernel.php文件。

dump()函数

vardump组件创建了一个全局变量dump ()你可以用它来代替。var_dump.通过使用它,你将获得:

  • 每个对象和资源类型专门的视图,例如过滤出Doctrine内部,同时转储单个代理实体,或获得更多关于打开文件的见解stream_get_meta_data
  • 可配置的输出格式:HTML或彩色命令行输出;
  • 能够转储内部引用,无论是软引用(对象或资源)还是硬引用(= &数组或对象属性)。重复出现的同一个对象/数组/资源将不再一次又一次地出现。此外,您还可以检查数据的引用结构;
  • 在输出缓冲处理程序上下文中操作的能力。

例如:

1 2 3 4 5 6 7 8 9
需要__DIR__“/供应商/ autoload.php”//创建一个变量,它可以是任何东西!someVar=……;转储(someVar);// dump()返回传递的值,因此您可以转储一个对象并继续使用它转储(someObject->someMethod ();

默认情况下,输出格式和目的地是根据您当前的PHP SAPI选择的:

  • 在命令行(CLI SAPI)上,输出被写入STDOUT.这可能会让一些人感到惊讶,因为这绕过了PHP的输出缓冲机制;
  • 在其他sapi上,转储在常规输出中以HTML的形式写入。

请注意

如果您想捕获转储输出作为字符串,请阅读先进的文档欧宝体育电话其中包含了一些例子。您还将学习如何更改格式或将输出重定向到您想要的地方。

提示

为了拥有dump ()函数在运行任何PHP代码时总是可用的,你可以在你的计算机上全局安装它:

  1. 运行Composer global需要symfony欧宝娱乐app下载地址/var dump
  2. 添加auto_prepend_file = ${HOME}/.composer/vendor/autoload.php到你的php . ini文件;
  3. 时不时地跑一跑Composer全局更新symfony/var欧宝娱乐app下载地址 dump获得最新的错误修复。

DebugBundle和Twig集成

DebugBundle允许将组件更好地集成到Symfony全堆栈框架中。欧宝娱乐app下载地址中默认启用dev而且测验Symfony标准版的环境。欧宝娱乐app下载地址

由于在控制器或应用程序的模型中生成(甚至是调试)输出可能只是通过发送HTTP报头或破坏视图来破坏它,bundle配置dump ()函数,以便将变量转储到web调试工具栏中。

但是如果工具栏不能显示,因为你调用了/退出或者发生了致命错误,则将转储写入常规输出。

在Twig模板中,有两个结构可用于转储变量。两者之间的选择主要是个人口味的问题,不过:

  • {% dump foo。酒吧%}是去的方式时,原来的模板输出不得修改:变量不转储内联,而是在web调试工具栏;
  • 相反,{{dump(foo.bar)}}dump内联,因此可能适合也可能不适合你的用例(例如,你不应该在HTML属性或< >脚本标签)。

属性可以更改此行为debug.dump_destination选择。阅读更多关于这个和其他选项DebugBundle配置参考

提示

3.3

本地搜索框是在Symfony 3.3中引入的。欧宝娱乐app下载地址

如果转储的内容比较复杂,可以考虑使用本地搜索框查找特定的变量或值。首先,单击转储内容的任意位置,然后按Ctrl。+ FCmd。+ F使本地搜索框出现。支持所有常用的快捷方式来导航搜索结果(Ctrl。+ GCmd。+ GF3等)完成后,按Esc。再把盒子藏起来。

在PHPUnit测试套件中使用vardump组件

VarDumper组件提供一个特征它可以帮助你为PHPUnit编写一些测试。

这将为您提供两个新的断言:

assertDumpEquals ()
验证作为第二个参数给出的变量的转储是否与第一个参数中以字符串形式提供的预期转储相匹配。
assertDumpMatchesFormat ()
类似于前面的方法,但在预期转储中接受占位符,基于assertStringMatchesFormat ()PHPUnit提供的方法。

例子:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
使用PHPUnit)框架TestCase使用欧宝娱乐app下载地址组件VarDumper测试VarDumperTestTraitExampleTest扩展TestCase使用VarDumperTestTrait公共函数testWithDumpEquals()testedVar= (123“foo”];expectedDump<< 123 1 => "foo"] EOTXT;->assertDumpEquals (expectedDumptestedVar);}}

转储示例和输出

对于简单的变量,读取输出应该很简单。下面是一些例子,首先是PHP中定义的变量,然后是它的转储表示:

1 2 3 4 5 6 7 8
var= (一个简单的字符串= >"在5个元素的数组中"“浮”= >1.0“整数”= >1“一个布尔”= >真正的'一个空数组'=> [],];转储(var);

请注意

灰色箭头是一个切换按钮,用于隐藏/显示嵌套结构的子结构。

1 2 3 4 5 6 7
var“这是一个多行字符串。\n”var.=“悬停字符串会显示它的长度。”var.=UTF-8字符串的长度是根据UTF-8字符计算的。\nvar.="非utf -8字符串长度以字节大小计算。\n"var.=“由于这个‘\xE9’八位体(\\xE9),\n”var.="此字符串不是UTF-8有效的,因此' b '前缀。\n";转储(var);
1 2 3 4 5 6 7 8 9
PropertyExample公共publicProperty“+”前缀表示公共属性。受保护的protectedProperty' ' # '受保护的和' - '私有的。'私人privateProperty“悬停某个属性会显示提醒。”;}varPropertyExample ();转储(var);

请注意

' #14 '是内部对象句柄。它允许比较同一对象的两个连续转储。

1 2 3 4 5 6 7 8
DynamicPropertyExample公共declaredProperty'此属性在类定义中声明';}varDynamicPropertyExample ();var->undeclaredProperty =运行时添加的动态属性名称周围有“”。;转储(var);
1 2 3 4 5 6 7
ReferenceExample公共信息循环引用和同级引用显示为“#number”。\nHovering them highlights all instances in the same dump.\n";}varReferenceExample ();var->aCircularReference =var;转储(var);
1 2 3 4 5 6 7 8
var\ ErrorException ("对于某些对象,属性具有特殊值\n""最好用常数表示,比如\n"”下面的“严重性”。悬停显示值(' 2 ')。\n"0, e_warning);转储(var);
1 2 3 4 5 6 7 8
var= [];var0] =1var1] = &var0];var1) + =1var2] = [硬引用(循环引用或同级引用)];var3.] = &var2];var3.] [] ="使用' &number '前缀转储。";转储(var);
1 2 3 4 5
var\ ArrayObject ();var[] =“一些资源和特殊对象,如当前”var[] ="一个人有时用虚拟来表现最好"var[] =“描述其内部状态的属性。”;转储(var);
1 2 3 4 5 6 7 8
varAcmeController (“当转储超过其最大项目限制时,\n”"或者当遇到一些特殊对象时,\n""children可以用省略号和\n代替"“可选地后面跟着一个数字,表示\n”“许多已经被移走了;在这种情况下是“9”。);转储(var);
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。