var_dump

(PHP 4, PHP 5, PHP 7)

var_dump打印变量的相关信息

说明

void var_dump ( mixed $expression [, mixed $... ] )

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

In PHP 5 all public, private and protected properties of objects will be returned in the output.

Tip

和直接将结果输出到浏览器一样,可使用输出控制函数来捕获当前函数的输出,然后(例如)保存到一个 string 中。

参数

expression

你要打印的变量。

返回值

没有返回值。

范例

Example #1 var_dump() 例子

<?php
$a 
= array(12, array("a""b""c"));
var_dump($a);
?>

以上例程会输出:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}
<?php

$b 
3.1;
$c true;
var_dump($b$c);

?>

以上例程会输出:

float(3.1)
bool(true)

参见

  • var_export() - 输出或返回一个变量的字符串表示
  • print_r() - 打印关于变量的易于理解的信息。

User Contributed Notes

Anonymous 19-Jul-2016 03:27
Be careful this outputs to stdout stream (1) instead of the proper stderr stream (2).
bob 23-Mar-2016 07:37
I personally prefer a single standalone function called debug from github.com/hazardland/debug.php

It outputs html formatted dump for a complex objects/nested arrays with an expand/collapse buttons and gives ability to simply observe deep level data structures without depleting your brain resources or in a form of 4 space tab indented plain text which looks like this (but html mode is just a fully satisfying thing):

id : 13
name : "deposit"
class : "\paypal\deposit"
title : "Deposit"
system (cashier\system)
    name : "paypal"
    class : "\paypal\system"
    title : "PayPal"
    image : "cashier_system_image_paypal.png"
    methods : null
balance : ""
affect : 1
min (cashier\amount)
    currency : "USD"
    value : "1"
    origin : null
max (cashier\amount)
    currency : "USD"
    value : "100"
    origin : null
currencys (array)
    EUR : "EUR"
    USD : "USD"
    RUB : "RUB"
cashiers (array)
    2 : "2"
tax (cashier\tax)
    items (array)
        EUR (array)
            0 (array)
                from : 0
                to : 20
                value : 0.3
                percent : 0
        USD (array)
            0 (array)
                from : 0
                to : 20
                value : 0.3
                percent : 0
        RUB (array)
            0 (array)
                from : 0
                to : 1500
                value : 25
                percent : 0
active : true
order : 13
nikhazy dot akos at gmail dot com 21-Jul-2015 07:29
I use this function for smaller projects.

<?php
/*
Function by ákos Nikházy
This function shows a formatted var_dump and backtrace of the line where it happens. Perfect for smaller projects for fast debugging.

@param mixed $v  -- variable to dump
@param bool $die -- it kills the script if true
*/
function varDump($v,$die = false)
{
       
               
/*the var_dump formatted with pre*/
       
echo '<pre>';
       
var_dump($v);
        echo
'</pre><hr>';
               
              
/*backtrace if important as it gives even more info*/
               
$backtrace = debug_backtrace();
        echo
'<pre>';
       
print_r($backtrace);
        echo
'</pre>';
          
               
/*stop here if needed*/
       
if($die) die();

}
?>
Cyrus 05-Jun-2015 05:36
Here's a function to output var_dump to PHP's error log

<?php
function var_error_log( $object=null ){
   
ob_start();                    // start buffer capture
   
var_dump( $object );           // dump the values
   
$contents = ob_get_contents(); // put the buffer into a variable
   
ob_end_clean();                // end capture
   
error_log( $contents );        // log contents of the result of var_dump( $object )
}
?>
b dot bergloev at gmail dot com 01-Nov-2014 08:45
I post a new var_dump function with colors and collapse features. It can also adapt to terminal output if you execute it from there. No need to wrap it in a pre tag to get it to work in browsers.

<?php
function dump_debug($input, $collapse=false) {
   
$recursive = function($data, $level=0) use (&$recursive, $collapse) {
        global
$argv;

       
$isTerminal = isset($argv);

        if (!
$isTerminal && $level == 0 && !defined("DUMP_DEBUG_SCRIPT")) {
           
define("DUMP_DEBUG_SCRIPT", true);

            echo
'<script language="Javascript">function toggleDisplay(id) {';
            echo
'var state = document.getElementById("container"+id).style.display;';
            echo
'document.getElementById("container"+id).style.display = state == "inline" ? "none" : "inline";';
            echo
'document.getElementById("plus"+id).style.display = state == "inline" ? "inline" : "none";';
            echo
'}</script>'."\n";
        }

       
$type = !is_string($data) && is_callable($data) ? "Callable" : ucfirst(gettype($data));
       
$type_data = null;
       
$type_color = null;
       
$type_length = null;

        switch (
$type) {
            case
"String":
               
$type_color = "green";
               
$type_length = strlen($data);
               
$type_data = "\"" . htmlentities($data) . "\""; break;

            case
"Double":
            case
"Float":
               
$type = "Float";
               
$type_color = "#0099c5";
               
$type_length = strlen($data);
               
$type_data = htmlentities($data); break;

            case
"Integer":
               
$type_color = "red";
               
$type_length = strlen($data);
               
$type_data = htmlentities($data); break;

            case
"Boolean":
               
$type_color = "#92008d";
               
$type_length = strlen($data);
               
$type_data = $data ? "TRUE" : "FALSE"; break;

            case
"NULL":
               
$type_length = 0; break;

            case
"Array":
               
$type_length = count($data);
        }

        if (
in_array($type, array("Object", "Array"))) {
           
$notEmpty = false;

            foreach(
$data as $key => $value) {
                if (!
$notEmpty) {
                   
$notEmpty = true;

                    if (
$isTerminal) {
                        echo
$type . ($type_length !== null ? "(" . $type_length . ")" : "")."\n";

                    } else {
                       
$id = substr(md5(rand().":".$key.":".$level), 0, 8);

                        echo
"<a href=\"javascript:toggleDisplay('". $id ."');\" style=\"text-decoration:none\">";
                        echo
"<span style='color:#666666'>" . $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "</span>";
                        echo
"</a>";
                        echo
"<span id=\"plus". $id ."\" style=\"display: " . ($collapse ? "inline" : "none") . ";\">&nbsp;&#10549;</span>";
                        echo
"<div id=\"container". $id ."\" style=\"display: " . ($collapse ? "" : "inline") . ";\">";
                        echo
"<br />";
                    }

                    for (
$i=0; $i <= $level; $i++) {
                        echo
$isTerminal ? "|    " : "<span style='color:black'>|</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                    }

                    echo
$isTerminal ? "\n" : "<br />";
                }

                for (
$i=0; $i <= $level; $i++) {
                    echo
$isTerminal ? "|    " : "<span style='color:black'>|</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                }

                echo
$isTerminal ? "[" . $key . "] => " : "<span style='color:black'>[" . $key . "]&nbsp;=>&nbsp;</span>";

               
call_user_func($recursive, $value, $level+1);
            }

            if (
$notEmpty) {
                for (
$i=0; $i <= $level; $i++) {
                    echo
$isTerminal ? "|    " : "<span style='color:black'>|</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                }

                if (!
$isTerminal) {
                    echo
"</div>";
                }

            } else {
                echo
$isTerminal ?
                       
$type . ($type_length !== null ? "(" . $type_length . ")" : "") . "  " :
                       
"<span style='color:#666666'>" . $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "</span>&nbsp;&nbsp;";
            }

        } else {
            echo
$isTerminal ?
                   
$type . ($type_length !== null ? "(" . $type_length . ")" : "") . "  " :
                   
"<span style='color:#666666'>" . $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "</span>&nbsp;&nbsp;";

            if (
$type_data != null) {
                echo
$isTerminal ? $type_data : "<span style='color:" . $type_color . "'>" . $type_data . "</span>";
            }
        }

        echo
$isTerminal ? "\n" : "<br />";
    };

   
call_user_func($recursive, $input);
}
?>
stlawson *AT* joyfulearthtech *DOT* com 10-Aug-2011 06:31
<?php
/**
 * Better GI than print_r or var_dump -- but, unlike var_dump, you can only dump one variable. 
 * Added htmlentities on the var content before echo, so you see what is really there, and not the mark-up.
 *
 * Also, now the output is encased within a div block that sets the background color, font style, and left-justifies it
 * so it is not at the mercy of ambient styles.
 *
 * Inspired from:     PHP.net Contributions
 * Stolen from:       [highstrike at gmail dot com]
 * Modified by:       stlawson *AT* JoyfulEarthTech *DOT* com
 *
 * @param mixed $var  -- variable to dump
 * @param string $var_name  -- name of variable (optional) -- displayed in printout making it easier to sort out what variable is what in a complex output
 * @param string $indent -- used by internal recursive call (no known external value)
 * @param unknown_type $reference -- used by internal recursive call (no known external value)
 */
function do_dump(&$var, $var_name = NULL, $indent = NULL, $reference = NULL)
{
   
$do_dump_indent = "<span style='color:#666666;'>|</span> &nbsp;&nbsp; ";
   
$reference = $reference.$var_name;
   
$keyvar = 'the_do_dump_recursion_protection_scheme'; $keyname = 'referenced_object_name';
   
   
// So this is always visible and always left justified and readable
   
echo "<div style='text-align:left; background-color:white; font: 100% monospace; color:black;'>";

    if (
is_array($var) && isset($var[$keyvar]))
    {
       
$real_var = &$var[$keyvar];
       
$real_name = &$var[$keyname];
       
$type = ucfirst(gettype($real_var));
        echo
"$indent$var_name <span style='color:#666666'>$type</span> = <span style='color:#e87800;'>&amp;$real_name</span><br>";
    }
    else
    {
       
$var = array($keyvar => $var, $keyname => $reference);
       
$avar = &$var[$keyvar];

       
$type = ucfirst(gettype($avar));
        if(
$type == "String") $type_color = "<span style='color:green'>";
        elseif(
$type == "Integer") $type_color = "<span style='color:red'>";
        elseif(
$type == "Double"){ $type_color = "<span style='color:#0099c5'>"; $type = "Float"; }
        elseif(
$type == "Boolean") $type_color = "<span style='color:#92008d'>";
        elseif(
$type == "NULL") $type_color = "<span style='color:black'>";

        if(
is_array($avar))
        {
           
$count = count($avar);
            echo
"$indent" . ($var_name ? "$var_name => ":"") . "<span style='color:#666666'>$type ($count)</span><br>$indent(<br>";
           
$keys = array_keys($avar);
            foreach(
$keys as $name)
            {
               
$value = &$avar[$name];
               
do_dump($value, "['$name']", $indent.$do_dump_indent, $reference);
            }
            echo
"$indent)<br>";
        }
        elseif(
is_object($avar))
        {
            echo
"$indent$var_name <span style='color:#666666'>$type</span><br>$indent(<br>";
            foreach(
$avar as $name=>$value) do_dump($value, "$name", $indent.$do_dump_indent, $reference);
            echo
"$indent)<br>";
        }
        elseif(
is_int($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color".htmlentities($avar)."</span><br>";
        elseif(
is_string($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color\"".htmlentities($avar)."\"</span><br>";
        elseif(
is_float($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color".htmlentities($avar)."</span><br>";
        elseif(
is_bool($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color".($avar == 1 ? "TRUE":"FALSE")."</span><br>";
        elseif(
is_null($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> {$type_color}NULL</span><br>";
        else echo
"$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> ".htmlentities($avar)."<br>";

       
$var = $var[$keyvar];
    }
   
    echo
"</div>";
}
?>
kobrasrealm at gmail dot com 23-Jun-2011 10:28
I wrote this dandy little function for using var_dump() on HTML documents so I don't have to view the source.

<?php
function htmldump($variable, $height="9em") {
echo
"<pre style=\"border: 1px solid #000; height: {$height}; overflow: auto; margin: 0.5em;\">";
var_dump($variable);
echo
"</pre>\n";
}
?>

You can pass arguments like this:
<?php
$sql
= mysql_query("SELECT id, name, value FROM table WHERE cond = 'value'");
$s = mysql_fetch_assoc($sql);

// Dump variable containing the result of the MySQL query
var_dump($s);
?>

The second parameter lets you specify the height of the box. Default is 9em, but if you're expecting a huge output you'll probably want a higher value.

<?php
var_dump
($s, "17em");
?>

Happy var_dumping.
flyfy1 at gmail dot com 22-Jun-2011 09:22
for output the var as string, include this function:
<?php
function var_dump_to_string($var){
   
$output = "<pre>";
   
_var_dump_to_string($var,$output);
   
$output .= "</pre>";
    return
$output;
}

function
_var_dump_to_string($var,&$output,$prefix=""){
    foreach(
$var as $key=>$value){
        if(
is_array($value)){
           
$output.= $prefix.$key.": \n";
           
_var_dump_to_string($value,$output,"  ".$prefix);
        } else{
           
$output.= $prefix.$key.": ".$value."\n";
        }
    }
}
?>

 (say if you want to output $var to string $output)
<?
php $output = var_dump_to_string($var);
?>
divinity76 at gmail dot com 23-Apr-2011 03:53
a html-encoded var_dump

<?php
function htmlvardump(){ob_start(); $var = func_get_args(); call_user_func_array('var_dump', $var); echo htmentities(ob_get_clean());}
?>

(creds: ekneuss / mOo @ irc.freenode.net/#php )
geoff at spacevs dot com 08-Apr-2010 05:10
var_export does not return the same output as var_dump, if you want the var_dump output in a return you can wrap the call in ob_* functions.

<?PHP
  ob_start
();
 
var_dump($_SERVER);
 
$dump = ob_get_clean();
?>
david at exposito dot mobi 07-Feb-2010 08:36
If you want to save exactly the content of an array into a variable to save ir later for example, use this:

<?php $xml = var_export($xml, true); ?>

You'll have in your same variable the content readable, instead of written down or anything else
ivolucien at gmail dot calm 06-Dec-2009 11:12
For the special case where you know that you are only dealing with arrays,
<?php string implode(string $glue, array $pieces) ?>
may be all that's necessary, and the $glue parameter can be used to insert placeholders if you need to do more complex formatting. Nested arrays and such are discussed on the implode() page.
egorinsk at gmail com 02-Feb-2009 01:08
Note that var_dump reset()'s array internal pointer!
rich dot schu at gmail dot com 10-Apr-2008 02:56
Keep in mind if you have xdebug installed it will limit the var_dump() output of array elements and object properties to 3 levels deep.

To change the default, edit your xdebug.ini file and add the folllowing line:
xdebug.var_display_max_depth=n

More information here:
http://www.xdebug.org/docs/display
highstrike at gmail dot com 08-Jan-2008 02:33
made 2 nifty functions based of what some people contributed here. Hope you find them usefull

usage ... call for the dump function. EG: dump($array, "Array dump");

<?php
////////////////////////////////////////////////////////
// Function:         dump
// Inspired from:     PHP.net Contributions
// Description: Helps with php debugging

function dump(&$var, $info = FALSE)
{
   
$scope = false;
   
$prefix = 'unique';
   
$suffix = 'value';
 
    if(
$scope) $vals = $scope;
    else
$vals = $GLOBALS;

   
$old = $var;
   
$var = $new = $prefix.rand().$suffix; $vname = FALSE;
    foreach(
$vals as $key => $val) if($val === $new) $vname = $key;
   
$var = $old;

    echo
"<pre style='margin: 0px 0px 10px 0px; display: block; background: white; color: black; font-family: Verdana; border: 1px solid #cccccc; padding: 5px; font-size: 10px; line-height: 13px;'>";
    if(
$info != FALSE) echo "<b style='color: red;'>$info:</b><br>";
   
do_dump($var, '$'.$vname);
    echo
"</pre>";
}

////////////////////////////////////////////////////////
// Function:         do_dump
// Inspired from:     PHP.net Contributions
// Description: Better GI than print_r or var_dump

function do_dump(&$var, $var_name = NULL, $indent = NULL, $reference = NULL)
{
   
$do_dump_indent = "<span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ";
   
$reference = $reference.$var_name;
   
$keyvar = 'the_do_dump_recursion_protection_scheme'; $keyname = 'referenced_object_name';

    if (
is_array($var) && isset($var[$keyvar]))
    {
       
$real_var = &$var[$keyvar];
       
$real_name = &$var[$keyname];
       
$type = ucfirst(gettype($real_var));
        echo
"$indent$var_name <span style='color:#a2a2a2'>$type</span> = <span style='color:#e87800;'>&amp;$real_name</span><br>";
    }
    else
    {
       
$var = array($keyvar => $var, $keyname => $reference);
       
$avar = &$var[$keyvar];
   
       
$type = ucfirst(gettype($avar));
        if(
$type == "String") $type_color = "<span style='color:green'>";
        elseif(
$type == "Integer") $type_color = "<span style='color:red'>";
        elseif(
$type == "Double"){ $type_color = "<span style='color:#0099c5'>"; $type = "Float"; }
        elseif(
$type == "Boolean") $type_color = "<span style='color:#92008d'>";
        elseif(
$type == "NULL") $type_color = "<span style='color:black'>";
   
        if(
is_array($avar))
        {
           
$count = count($avar);
            echo
"$indent" . ($var_name ? "$var_name => ":"") . "<span style='color:#a2a2a2'>$type ($count)</span><br>$indent(<br>";
           
$keys = array_keys($avar);
            foreach(
$keys as $name)
            {
               
$value = &$avar[$name];
               
do_dump($value, "['$name']", $indent.$do_dump_indent, $reference);
            }
            echo
"$indent)<br>";
        }
        elseif(
is_object($avar))
        {
            echo
"$indent$var_name <span style='color:#a2a2a2'>$type</span><br>$indent(<br>";
            foreach(
$avar as $name=>$value) do_dump($value, "$name", $indent.$do_dump_indent, $reference);
            echo
"$indent)<br>";
        }
        elseif(
is_int($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color$avar</span><br>";
        elseif(
is_string($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color\"$avar\"</span><br>";
        elseif(
is_float($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color$avar</span><br>";
        elseif(
is_bool($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color".($avar == 1 ? "TRUE":"FALSE")."</span><br>";
        elseif(
is_null($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> {$type_color}NULL</span><br>";
        else echo
"$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $avar<br>";

       
$var = $var[$keyvar];
    }
}
?>
vladimir at pixeltomorrow dot com 10-Sep-2007 09:45
You can also use the PEAR package available at http://pear.php.net/package/Var_Dump

which parses the variable content in a very pleasant manner, a lot more easier to "follow" than the built-in var_dump() function.

Of course there are many others, but I prefer this one, because it's simply to use.

Just add at the begining of your file:

<?php

require('Var_Dump.php'); // make sure the pear package path is set in php.ini
Var_Dump::displayInit(array('display_mode' => 'HTML4_Text'), array('mode' => 'normal','offset' => 4));
?>

then, instead of simply using var_dump($foo), use:

<?php

Var_Dump
::display($foo);

?>

Read the documentation if you're looking for different output layouts.

Cheers!
Vladimir Ghetau
thriller dot ze at gmail dot com 21-Aug-2007 10:49
As Bryan said, it is possible to capture var_dump() output to a string. But it's not quite exact if the dumped variable contains HTML code.

You can use this instead:

<?php
echo '<pre>'; // This is for correct handling of newlines
ob_start();
var_dump($var);
$a=ob_get_contents();
ob_end_clean();
echo
htmlspecialchars($a,ENT_QUOTES); // Escape every HTML special chars (especially > and < )
echo '</pre>';
?>
php at mikeboers dot com 28-Jun-2007 10:08
Howdy!

I am working on a pretty large project where I needed to dump a human readable form of whatever into the log files... and I thought var_export was too difficult to read. BigueNique at yahoo dot ca has a nice solution, although I needed to NOT modify whatever was being passed to dump.

So borrowing heavily from BigueNique's (just reworked his function) and someone's idea over in the object cloning page, I came up with the following function.

It makes a complete copy of whatever object you initially pass it, including all recursive definitions and outside objects references, then does the same thing as BigueNique's function. I also heavily reworked what it output, to suit my needs.

<?php

function var_log(&$varInput, $var_name='', $reference='', $method = '=', $sub = false) {

    static
$output ;
    static
$depth ;

    if (
$sub == false ) {
       
$output = '' ;
       
$depth = 0 ;
       
$reference = $var_name ;
       
$var = serialize( $varInput ) ;
       
$var = unserialize( $var ) ;
    } else {
        ++
$depth ;
       
$var =& $varInput ;
       
    }
       
   
// constants
   
$nl = "\n" ;
   
$block = 'a_big_recursion_protection_block';
   
   
$c = $depth ;
   
$indent = '' ;
    while(
$c -- > 0 ) {
       
$indent .= '|  ' ;
    }

   
// if this has been parsed before
   
if ( is_array($var) && isset($var[$block])) {
   
       
$real =& $var[ $block ] ;
       
$name =& $var[ 'name' ] ;
       
$type = gettype( $real ) ;
       
$output .= $indent.$var_name.' '.$method.'& '.($type=='array'?'Array':get_class($real)).' '.$name.$nl;
   
   
// havent parsed this before
   
} else {

       
// insert recursion blocker
       
$var = Array( $block => $var, 'name' => $reference );
       
$theVar =& $var[ $block ] ;

       
// print it out
       
$type = gettype( $theVar ) ;
        switch(
$type ) {
       
            case
'array' :
               
$output .= $indent . $var_name . ' '.$method.' Array ('.$nl;
               
$keys=array_keys($theVar);
                foreach(
$keys as $name) {
                   
$value=&$theVar[$name];
                   
var_log($value, $name, $reference.'["'.$name.'"]', '=', true);
                }
               
$output .= $indent.')'.$nl;
                break ;
           
            case
'object' :
               
$output .= $indent.$var_name.' = '.get_class($theVar).' {'.$nl;
                foreach(
$theVar as $name=>$value) {
                   
var_log($value, $name, $reference.'->'.$name, '->', true);
                }
               
$output .= $indent.'}'.$nl;
                break ;
           
            case
'string' :
               
$output .= $indent . $var_name . ' '.$method.' "'.$theVar.'"'.$nl;
                break ;
               
            default :
               
$output .= $indent . $var_name . ' '.$method.' ('.$type.') '.$theVar.$nl;
                break ;
               
        }
       
       
// $var=$var[$block];
       
   
}
   
    --
$depth ;
   
    if(
$sub == false )
        return
$output ;
       
}

// var_log( $var, '$name' ) ;

?>

Hope it works well for you!
Bryan 04-Jun-2007 06:38
Here's how you use output buffering to save var_dump to a string, as described in the Tip box.

<?php
ob_start
();
var_dump($my_variable);
$my_string = ob_get_contents();
ob_end_clean();
?>
Zak Scott 24-May-2007 07:45
One of the most used approaches to this I have is:
<?php
echo "<pre>";
print_r($array); // or var_dump()
echo "</pre><br>";
?>

This is great for debugging purposes, no need for a long-winded debug class in most cases. Unless maybe you have a gigantic project that you didn't build yourself.
kaloyan at gmail dot com 26-Apr-2007 08:32
We can all agree that var_dump(); output is very spartan looking. The debug data needs to be organized better, and presented in a graceful way. In the era of Web 2.0 it is somewhat strange to use plain text to dump information. A DHTML powered informatiion dumping tool will be quite better - like the the open-source alternative of var_dump(); -- Krumo (http://krumo.sourceforge.net).

It renders the output using DHTML and collapsible nodes, it's layout is "skinable" and you can change it to fit your aesthetic taste. Krumo makes the output "human-readable" for real :) Plus it is compliant with both PHP4 and PHP5. Plus it detects "reference recursion". Plus you can use it to dump all various sort of data like debug back-traces, the superglobals ($_SERVER, $_ENV, $_REQUEST, $_COOKIE, $_GET, $_POST, $_SESSION), all the included files, all the declared classes, all the declared constants, all your PHP settings, all your php.ini values (if it is readable), all the loaded extensions, all the HTTP request headers, all the declared interfaces (for PHP5), all the file paths from INCLUDE_PATH, all the values of any particular INI file. Additionally it is designed to be easy to use - for example you can disable all the Krumo dumps instead of cleaning your code out of all print_r()'s and var_dump()'s. Anyway, if you check the site (http://krumo.sourceforge.net), you can found a lot of examples, demonstrations, documentation and all sort of helpful information.
thc at forestfactory dot de 06-Mar-2007 09:01
Well, like many others I was looking for a way to get nice dumps of variables. I think I'm about to solve this once and for all; or at least for PHP 5.1. Have a look at my project HLI. http://hli.forestfactory.de

It dumps and highlights not only Arrays and Object but also DOMDocument (as XML), DB results (as table), GD-Images (as PNG), DirectoryIterators (as table), Serialized Strings and many more.

It prints backtrace, object reflection (including PHPDoc) and the position of the dump. Dumps are movable, resizeable and foldable.

It is plugin-based, so its easy to write new dump-modes for other objects/resources. It generates XML output that is parsed by XSLT to HTML and will soon be able to be handled over AJAX (I will do this the next time I program some AJAX stuff).

It runs out of the box (tested with PHP 5.1 and PHP 5.2), but this is only a 0.1 release, so please tell me if something in wrong and I'll be happy to fix it.

Oh, and it's LGPL, so just use and enjoy it. I couldn't work without it any more.

Thomas
eric at ITCbrandt dot com swap ITC/brandt 31-Dec-2006 07:57
Very new to this and really appreciate the contributions of everyone.  I really rely on this site .  BigueNique inspired me with the last post.

I am writing an application that is WAY above my head and am buried in pages of variables and objects.  I really wanted an easier way to read them.

I had two problems - 1. The lists were too long; 2. It was hard to tell where one ended and the other began; 3.  By the time I saw my rendered forms, I forgot where my variable listing was. (Yeah, I can't count, get over it - now you know why this is so hard for me)

I had a variable dumping routine that worked better than the print_r, but elegant_dump was MUCH nicer.

I added a little bit of CSS and javascript to mine, and I have a really quick and easy way to display a colored title with a toggle control to expand or contract the variable structure and contents.

It might be too rudimentary for most of you guys, and I'm not answering anyone's question specifically, but perhaps this creative implementation will make someone's life a little easier.  At a minimum, It might be a good example of mixing in the different languages which was initially a big challenge for me.

simply call: dump_e($var,[$TracerMessage],[$ColorBackground],[$ColorContentBox]);

I have explained my functions as well as posted the required code to make it work here: http://tech.brandtitc.com/dump_e.php

It is a little too long to post in this venue.

Best Regards.
jonbarnett at gmail dot com 02-Oct-2006 09:25
dumping objects that reference each other could lead to infinite recursion
<?php
$brother
= new Sibling();
$sister = new Sibling();
$brother->sister = $sister;
$sister->brother = $brother;

var_dump($brother);
/* dumps all of $brother's properties, including "sister", which dumps all of $sister's properties, including "brother", etc. */
?>
Storm 19-Aug-2006 07:12
ul_var_dump - dump $var to <ul><li></li></ul>

<?php

function ul_var_dump(&$var,$type=0)
{
    if(!
$type)
        echo
"<ul type='circle' style='border:1px solid #a0a0a0;padding-bottom:4px;padding-right:4px'>\n<li>";
    if(
is_array($var))
    {
        echo
"[array][".count($var)."]";
        echo
"<ul type='circle' style='border:1px solid #a0a0a0;padding-bottom:4px;padding-right:4px'>\n";
        foreach(
$var as $k=>$v)
        {
            echo
"<li>\"{$k}\"=>";
           
ul_var_dump(&$v,1);
        }
        echo
"</ul>\n";
    }
    else
        echo
"[".gettype($var)."][{$var}]</li>\n";
    if(!
$type)
        echo
"</ul>\n";
}

?>
ospinto at hotmail dot com 07-Aug-2005 06:43
Just created this neat class that dumps a variable in a colored tabular structure similar to the cfdump tag in Coldfusion. Very easy to use and makes it so much easier to see the contents of variable. For examples and download, visit http://dbug.ospinto.com
edwardzyang at thewritingpot dot com 20-Mar-2005 11:06
If you're like me and uses var_dump whenever you're debugging, you might find these two "wrapper" functions helpful.

This one automatically adds the PRE tags around the var_dump output so you get nice formatted arrays.

<?php

function var_dump_pre($mixed = null) {
  echo
'<pre>';
 
var_dump($mixed);
  echo
'</pre>';
  return
null;
}

?>

This one returns the value of var_dump instead of outputting it.

<?php

function var_dump_ret($mixed = null) {
 
ob_start();
 
var_dump($mixed);
 
$content = ob_get_contents();
 
ob_end_clean();
  return
$content;
}

?>

Fairly simple functions, but they're infinitely helpful (I use var_dump_pre() almost exclusively now).
anon 28-Jan-2005 03:31
var_dump(get_defined_vars());
will dump all defined variables to the browser.