Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么var_dump显示文件名和行号?_Php_Var Dump - Fatal编程技术网

Php 为什么var_dump显示文件名和行号?

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中的var_dump()开始打印文件名和行号,然后才实际转储我的变量。我不知道服务器上有什么重大变化,所以我想知道为什么会发生这种情况,而且在web或PHP文档中也找不到()

使用命令行时也会出现这种奇怪的行为:

 > 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(
)