VarDumper组件

编辑该页面

警告:你浏览的文档欧宝体育电话<一个href="//www.oldmanjams.com/releases/5.1">欧宝娱乐app下载地址Symfony 5.1,不再维护。

读<一个href="//www.oldmanjams.com/doc/current/components/var_dumper.html">这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

VarDumper组件< /h1>

VarDumper组件提供了机制提取任何PHP变量的状态。之上,它提供了一个更好dump ()功能,您可以使用代替<一个href="https://secure.php.net/manual/en/function.var-dump.php" class="reference external" title="var_dump" rel="external noopener noreferrer" target="_blank">var_dump

dump()函数< /h2>

VarDumper组件创建一个全球性的dump ()功能,您可以使用,而不是如。<一个href="https://secure.php.net/manual/en/function.var-dump.php" class="reference external" title="var_dump" rel="external noopener noreferrer" target="_blank">var_dump。通过使用它,您将获得:

  • 每个对象和资源类型专业观点如过滤原则内部而倾倒一个代理实体,或得到更多的洞察力在打开文件<一个href="https://secure.php.net/manual/en/function.stream-get-meta-data.php" class="reference external" title="stream_get_meta_data" rel="external noopener noreferrer" target="_blank">stream_get_meta_data;
  • 可配置的输出格式:HTML或彩色命令行输出;
  • 转储内部引用的能力,要么是软的(对象或资源)或硬的(= &数组或对象属性)。重复出现相同的对象数组/资源不会出现一次又一次了。此外,你可以检查你的参考结构数据;
  • 运营能力的输出缓冲处理程序。

例如:

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

默认情况下,选择输出格式和目标是基于你当前的PHP SAPI:

  • 在命令行(CLI SAPI),输出STDOUT。这可奇怪因为这绕过一些PHP的输出缓冲机制;
  • 在其他sapi,转储被编写为常规的HTML输出。

提示

您也可以选择输出格式明确定义VAR_DUMPER_FORMAT环境变量,设置它的值htmlcli

请注意

如果你想赶上转储输出作为一个字符串,请阅读<一个href="//www.oldmanjams.com/doc/5.1/components/var_dumper/advanced.html" class="reference internal">先进的文档欧宝体育电话它包含的例子。您还将了解如何更改格式或将输出重定向到任何你想要的。

提示

以有dump ()函数总是可用的运行时任何PHP代码,你可以在你的电脑安装它在全球范围内:

  1. 运行全球需要symfony / var-dumper欧宝娱乐app下载地址作曲家;
  2. 添加auto_prepend_file = ${回家}/ .composer /供应商/ autoload.php到你的php . ini文件;
  3. 不时地运行全球更新symfony / var-dumpe欧宝娱乐app下载地址r作曲家有最新的bug修复。

提示

VarDumper组件还提供了一个dd ()(“转储和死”)helper函数。这个函数转储的变量使用dump ()并立即结束的执行脚本(使用<一个href="https://secure.php.net/manual/en/function.exit.php" class="reference external" title="退出" rel="external noopener noreferrer" target="_blank">退出)。

转储文件服务器< /h2>

dump ()函数输出其内容在同一个浏览器窗口或控制台终端作为您自己的应用程序。有时混合调试输出的实际产出可以混淆。这就是为什么这个组件提供了一个服务器收集所有倾倒的数据。

在启动服务器服务器:转储命令,每当你打电话dump (),把数据不会显示在输出发送到服务器,但是,它输出自己的控制台或一个HTML文件:

1 2 3 4 5 6
#显示了数据在控制台:美元php bin /控制台服务器:转储[好]服务器监听tcp: / / 0.0.0.0:9912#把数据存储在一个文件使用HTML格式:美元php bin /控制台服务器:转储= html > dump.html——格式

在Symfony应欧宝娱乐app下载地址用程序中,服务器的输出转储配置了<一个href="//www.oldmanjams.com/doc/5.1/reference/configuration/debug.html" class="reference internal">dump_destination选项调试包:

  • YAML
  • XML
  • PHP
1 2 3
#配置/包/ debug.yaml调试:dump_destination:“tcp: / / % env (VAR_DUMPER_SERVER) %”

在Symfony应用欧宝娱乐app下载地址程序使用<一个href="https://github.com/symfony/symfony/blob/5.1/src/Symfony/Component/VarDumper/Dumper/ServerDumper.php" class="reference external" title="ServerDumper" rel="external noopener noreferrer" target="_blank">ServerDumper类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
需要__DIR__“/供应商/ autoload.php”;使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\ContextProvider\CliContextProvider;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\ContextProvider\SourceContextProvider;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\HtmlDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\ServerDumper;使用欧宝娱乐app下载地址\组件\VarDumper\VarDumper;美元切割=VarCloner ();美元fallbackDumper= \ in_array (\ PHP_SAPI [“cli”,“phpdbg”])?CliDumper ():HtmlDumper ();美元自动倾卸车=ServerDumper (“tcp: / / 127.0.0.1:9912”,美元fallbackDumper,(“cli”= >CliContextProvider (),“源”= >SourceContextProvider ()));VarDumper::setHandler (函数(美元var)使用(美元切割,美元自动倾卸车){美元自动倾卸车- >转储(美元切割- >cloneVar (美元var));});

请注意

第二个参数的<一个href="https://github.com/symfony/symfony/blob/5.1/src/Symfony/Component/VarDumper/Dumper/ServerDumper.php" class="reference external" title="ServerDumper" rel="external noopener noreferrer" target="_blank">ServerDumper是一个<一个href="https://github.com/symfony/symfony/blob/5.1/src/Symfony/Component/VarDumper/Dumper/DataDumperInterface.php" class="reference external" title="DataDumperInterface" rel="external noopener noreferrer" target="_blank">DataDumperInterface实例用作后备服务器什么时候遥不可及的。第三个参数是上下文提供者,它允许收集一些信息的上下文数据就是倾销。内置的上下文提供者:cli,请求

然后您可以使用以下命令启动一个服务器开箱即用的:

1 2
美元[好]。/供应商/ bin / var-dump-server服务器监听tcp: / / 127.0.0.1:9912

在PHPUnit)中使用VarDumper组件测试套件中< /h2>

VarDumper组件提供了<一个href="https://github.com/symfony/symfony/blob/5.1/src/Symfony/Component/VarDumper/Test/VarDumperTestTrait.php" class="reference external" title="一个特征" rel="external noopener noreferrer" target="_blank">一个特征可以帮助为PHPUnit)写一些你的测试。

这将给你提供两个新的断言:

assertDumpEquals ()< /dt>
验证变量的转储作为第二个参数匹配预期的转储作为第一个参数提供。
assertDumpMatchesFormat ()< /dt>
就像以前的方法,但是接受预期转储中占位符,根据assertStringMatchesFormat ()PHPUnit)提供的方法。

VarDumperTestTrait这些其他的方法还包括:

setUpVarDumper ()< /dt>
用于配置可用的脚轮和他们的选择,这是一种只有你期望控制字段和允许编写简洁的测试。
tearDownVarDumper ()< /dt>
被称为自动每次复位后的自定义配置setUpVarDumper ()

例子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
使用PHPUnit)\框架\TestCase;使用欧宝娱乐app下载地址\组件\VarDumper\测试\VarDumperTestTrait;ExampleTest扩展TestCase{使用VarDumperTestTrait;受保护的函数设置(){美元脚轮= [\ DateTimeInterface::类= >静态函数(\ DateTimeInterface美元日期数组,美元一个,存根美元存根):数组{美元存根- >类=“DateTime”;返回(“日期”= >美元日期- >格式(' d / m / Y '));});美元旗帜= CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR;/ /配置脚轮和标志使用这个类的所有的测试。/ /如果你需要自定义配置每个测试,而不是对整个类,/ /调用这个setUpVarDumper()方法的测试。美元- >setUpVarDumper (美元脚轮,美元旗帜);}公共函数testWithDumpEquals(){美元testedVar= (123年,“foo”];/ /将转储内容没有默认VarDumper结构/ /因为在测试使用的定制脚轮和旗帜美元expectedDump=< < < EOTXT EOTXT(123年,“foo”);/ /如果第一个参数是一个字符串,它必须整个预期的转储美元- >assertDumpEquals (美元expectedDump,美元testedVar);/ /如果第一个参数是一个字符串,assertDumpEquals()转储/ /第二个参数并比较的转储美元- >assertDumpEquals (美元testedVar,美元testedVar);}}

转储和输出示例< /h2>

对于简单的变量,输出应该简单阅读。这里有一些例子显示第一个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。=“徘徊在一个字符串显示其长度。\ n”;美元var。=“utf - 8编码的字符串的长度计算utf - 8字符。\ n”;美元var。=“Non-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=“徘徊在一个属性显示提醒。”;}美元var=PropertyExample ();转储(美元var);

请注意

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

1 2 3 4 5 6 7 8
DynamicPropertyExample{公共美元declaredProperty=“这类定义中声明的属性”;}美元var=DynamicPropertyExample ();美元var- >undeclaredProperty =运行时添加动态属性有”在他们的名字。;转储(美元var);
1 2 3 4 5 6 7
ReferenceExample{公共美元信息=“循环和兄弟姐妹引用显示为“#号”。\nHovering them highlights all instances in the same dump.\n"< /span>;}美元var=ReferenceExample ();美元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= [];美元var(0]=1;美元var(1]= &美元var(0];美元var(1)+ =1;美元var(2]= [“硬引用(圆形或兄弟姐妹)”];美元var(3]= &美元var(2];美元var(3][]=“‘数量’倾倒使用前缀。”;转储(美元var);
1 2 3 4 5
美元var=\ ArrayObject ();美元var[]=“一些资源和特殊的物品,例如当前”;美元var[]=“有时最好使用虚拟”来表示;美元var[]=”属性,描述他们的内部状态。”;转储(美元var);
1 2 3 4 5 6 7 8
美元var=AcmeController (“当一个转储超过它的最大项目限制,\ n””或当遇到一些特殊的对象\ n”“孩子们可以取代一个省略号和\ n””(可选),后跟一个数字表示\ n”“许多已被移除;“9”在这种情况下。\ n”);转储(美元var);

这项工作,包括代码示例,许可下<一个rel="license" href="https://creativecommons.org/licenses/by-sa/3.0/">Creative Commons冲锋队3.0许可证。