10

Just recently var_dump() in PHP (currently using 5.6.23) started to print out the filename as well as the line number before actually dumping my variable. I'm not aware of any major changes on the server, so I was wondering why this happens, also there's nothing to be found on the web or in the PHP-documentation (var_dump())

The strange behaviour also happens when using the command line:

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

While I'm just used to "string(3) "lol"" being printed.

This is not a showstopper but broke a couple of my unit-tests where I needed to compare some output from an API which is printed using var_dump(). I first thought it could be related to xdebug, but couldn't find any directive that seemd to be related to this problem.

Any hint what is causing this is appreciated.

Select0r
  • 12,234
  • 11
  • 45
  • 68
  • 3
    You have `xdebug` enabled. I tried on 2 versions of PHP, one has it, other doesn't. The one with `xdebug` gives the same result as the one you posted. – Mjh Jul 14 '16 at 13:22
  • 1
    From https://derickrethans.nl/xdebug-2.3-overload-vardump.html there is Xdebug 2.3 enhances the overloading of var_dump() with the inclusion of the file name and line number where var_dump() is called at. – nerdlyist Jul 14 '16 at 13:25
  • @nerdlyist - why don't you back your statement up with some code that shows how to use accessors and how to do asserts on them? – Mjh Jul 14 '16 at 13:30
  • 1
    Possible duplicate of [When I debug php with var\_dump variable it always outputs file path at the beginning?](https://stackoverflow.com/questions/36939095/when-i-debug-php-with-var-dump-variable-it-always-outputs-file-path-at-the-begin) – Don't Panic Aug 11 '17 at 22:28

2 Answers2

11

You have xdebug enabled.

One of the new features relates to one of the first things that I added in the original Xdebug: making the var_dump() output "pretty". Xdebug replaces PHP's standard var_dump() function with its own version, as long as the xdebug.overload_var_dump setting is not set to 0


Xdebug 2.3 enhances the overloading of var_dump() with the inclusion of the file name and line number where var_dump() is called at. This has been a long standing feature request.

Here is my output without xdebug;

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

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

Maksym Semenykhin
  • 1,924
  • 15
  • 26
1

If you don't want the extra data produced by var_dump(), you can use var_export() which will show a stripped-down output.

Here is a test case:

$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;
}

Output of plain old PHP:

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

Output of 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;
}

Output of PHP (plain or with XDEBUG)

''
'foo'
NULL
false
true
0
(object) array(
)
pbarney
  • 2,529
  • 4
  • 35
  • 49