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

时间:2016-07-14 13:19:13

标签: php var-dump

就在最近,PHP中的var_dump()(目前使用的是5.6.23)在实际转储变量之前就开始打印出文件名和行号。我不知道服务器上有任何重大变化,所以我想知道为什么会发生这种情况,也就是在网上或PHP文档中找不到任何东西(var_dump()

使用命令行时也会发生奇怪的行为:

 > php -r 'var_dump("lol");'
 Command line code:1:
 string(3) "lol"

虽然我习惯于“字符串(3)”lol“”正在打印。

这不是一个showstopper,但打破了我的几个单元测试,我需要比较一些使用var_dump()打印的API的输出。 我首先想到它可能与xdebug有关,但找不到任何似乎与此问题相关的指令。

任何暗示造成这种情况的提示都表示赞赏。

2 个答案:

答案 0 :(得分:8)

您已启用xdebug。

  

其中一个新功能与我的第一件事有关   添加在原始Xdebug中:使var_dump()输出"漂亮"。   Xdebug用自己的标准替换了PHP的标准var_dump()函数   版本,只要xdebug.overload_var_dump设置未设置为   0   

<小时/>   Xdebug 2.3通过包含增强了var_dump()的重载   调用var_dump()的文件名和行号的位置。这个   一直是一个长期的功能要求。

这是我没有xdebug的输出;

>php -r "var_dump('lol')";
string(3) "lol"

https://derickrethans.nl/xdebug-2.3-overload-vardump.html

答案 1 :(得分:1)

如果您不希望var_dump()产生额外的数据,可以使用var_export()来显示精简的输出。

这是一个测试用例:

$values = [
    0 => '',
    1 => 'foo',
    2 => null,
    3 => false,
    4 => true,
    5 => 0,
    6 => new stdClass
];

var_dump():

foreach ($values as $value) {
    echo var_dump($value) . PHP_EOL;
}

普通的旧PHP输出:

string(0) ""
string(3) "foo"
NULL
bool(false)
bool(true)
int(0)
object(stdClass)#1 (0) {
}

PHP XDEBUG的输出:

/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]

var_export():

foreach ($values as $value) {
    echo var_export($value) . PHP_EOL;
}

PHP的输出(纯文本或XDEBUG)

''
'foo'
NULL
false
true
0
(object) array(
)