【问题标题】:Why does var_dump show filename and line number?为什么 var_dump 显示文件名和行号?
【发布时间】:2016-11-17 10:34:52
【问题描述】:

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

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

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

虽然我只是习惯了 "string(3) "lol"" 被打印出来。

这不是一个炫技,但破坏了我的几个单元测试,我需要比较使用 var_dump() 打印的 API 的一些输出。 我一开始以为可能和xdebug有关,但是找不到任何似乎与这个问题有关的指令。

感谢任何导致此问题的提示。

【问题讨论】:

标签: php var-dump


【解决方案1】:

您已启用 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

【讨论】:

  • 行添加到您的单元测试以禁用 xdebugs 重载ini_set('xdebug.overload_var_dump', '0');
【解决方案2】:

如果您不想要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(
)

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2016-07-05
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多