Php 为什么var_dump显示文件名和行号?
就在最近,PHP中的var_dump()开始打印文件名和行号,然后才实际转储我的变量。我不知道服务器上有什么重大变化,所以我想知道为什么会发生这种情况,而且在web或PHP文档中也找不到() 使用命令行时也会出现这种奇怪的行为:Php 为什么var_dump显示文件名和行号?,php,var-dump,Php,Var Dump,就在最近,PHP中的var_dump()开始打印文件名和行号,然后才实际转储我的变量。我不知道服务器上有什么重大变化,所以我想知道为什么会发生这种情况,而且在web或PHP文档中也找不到() 使用命令行时也会出现这种奇怪的行为: > php -r 'var_dump("lol");' Command line code:1: string(3) "lol" 而我只是习惯于打印“string(3)”lol“ 这不是一个showstopper,而是破坏了我的几个单元测试,我需要比较使用
> php -r 'var_dump("lol");'
Command line code:1:
string(3) "lol"
而我只是习惯于打印“string(3)”lol“
这不是一个showstopper,而是破坏了我的几个单元测试,我需要比较使用var_dump()打印的API的一些输出。
我最初认为它可能与xdebug有关,但找不到任何似乎与此问题有关的指令
任何导致此问题的提示都将受到欢迎。您已启用xdebug。 其中一个新特性与我首先要做的事情有关 在原始Xdebug中添加:使var_dump()输出“漂亮”。 Xdebug用自己的函数替换PHP的标准var_dump()函数 版本,只要xdebug.overload\u var\u dump设置未设置为 0
Xdebug 2.3通过包含 调用var_dump()的文件名和行号。这 这是一个长期存在的功能要求 这是我没有xdebug的输出
>php -r "var_dump('lol')";
string(3) "lol"
如果您不想使用
var\u dump()
生成的额外数据,可以使用var\u export()
来显示精简输出
这里有一个测试用例:
$values = [
0 => '',
1 => 'foo',
2 => null,
3 => false,
4 => true,
5 => 0,
6 => new stdClass
];
var_dump(): 普通旧PHP的输出:
$values = [
0 => '',
1 => 'foo',
2 => null,
3 => false,
4 => true,
5 => 0,
6 => new stdClass
];
PHP XDEBUG的输出:
$values = [
0 => '',
1 => 'foo',
2 => null,
3 => false,
4 => true,
5 => 0,
6 => new stdClass
];
var\u export(): PHP输出(普通或带XDEBUG)
您已启用
xdebug
。我试过两个版本的PHP,一个有,另一个没有。带有xdebug
的那一个给出了与您发布的结果相同的结果。从中可以看出,xdebug 2.3增强了var_dump()的重载,包括了var_dump()所在的文件名和行号调用时。@nerdlyist-为什么不用一些代码来备份您的语句,说明如何使用访问器以及如何对它们进行断言?要添加到单元测试中的行可能重复,以禁用xdebugs重载ini\u集('xdebug.overload\u var\u dump','0')代码>
/var/www/html/test.php:12:string '' (length=0)
/var/www/html/test.php:12:string 'foo' (length=3)
/var/www/html/test.php:12:null
/var/www/html/test.php:12:boolean false
/var/www/html/test.php:12:boolean true
/var/www/html/test.php:12:int 0
/var/www/html/test.php:12:
object(stdClass)[1]
foreach ($values as $value) {
echo var_export($value) . PHP_EOL;
}
''
'foo'
NULL
false
true
0
(object) array(
)