就在最近,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有关,但找不到任何似乎与此问题相关的指令。
任何暗示造成这种情况的提示都表示赞赏。
答案 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"
答案 1 :(得分:1)
如果您不希望var_dump()
产生额外的数据,可以使用var_export()
来显示精简的输出。
这是一个测试用例:
$values = [
0 => '',
1 => 'foo',
2 => null,
3 => false,
4 => true,
5 => 0,
6 => new stdClass
];
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]
foreach ($values as $value) {
echo var_export($value) . PHP_EOL;
}
PHP的输出(纯文本或XDEBUG)
''
'foo'
NULL
false
true
0
(object) array(
)