Pregunta ¿Cómo puedo capturar el resultado de var_dump en una cadena?


Me gustaría capturar la salida de var_dump a una cadena.

Los documentos de PHP dicen;

Como con cualquier cosa que muestre su resultado directamente al navegador, el funciones de control de salida se puede usar para capturar la salida de esta función y guardarla en una cadena (por ejemplo).

¿Puede alguien darme un ejemplo de cómo eso podría funcionar?

print_r() no es una posibilidad válida porque no me dará la información que necesito.


507
2017-09-26 13:23


origen


Respuestas:


Use el buffer de salida:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

515
2017-09-26 13:25



Tratar var_export

Es posible que desee retirar var_export - mientras que no proporciona el mismo resultado que var_dump proporciona un segundo $return parámetro que hará que devuelva su resultado en lugar de imprimirlo:

$debug = var_export($my_var, true);

¿Por qué?

Prefiero este one-liner para usar ob_start y ob_get_clean(). También me parece que la salida es un poco más fácil de leer, ya que es solo código PHP.

La diferencia entre var_dump y var_export es eso var_export devuelve un "representación de cadena procesable de una variable" mientras var_dump simplemente vuelca información sobre una variable. Lo que esto significa en la práctica es que var_export le da un código PHP válido (pero es posible que no le proporcione tanta información sobre la variable, especialmente si está trabajando con recursos)

Manifestación:

$demo = array(
    "bool" => false,
    "int" => 1,
    "float" => 3.14,
    "string" => "hello world",
    "array" => array(),
    "object" => new stdClass(),
    "resource" => tmpfile(),
    "null" => null,
);

// var_export -- nice, one-liner
$debug_export = var_export($demo, true);

// var_dump
ob_start();
var_dump($demo);
$debug_dump = ob_get_clean();

// print_r -- included for completeness, though not recommended
$debug_printr = print_r($demo, true);

La diferencia en el resultado:

var_export ($debug_export en el ejemplo anterior):

 array (
  'bool' => false,
  'int' => 1,
  'float' => 3.1400000000000001,
  'string' => 'hello world',
  'array' => 
  array (
  ),
  'object' => 
  stdClass::__set_state(array(
  )),
  'resource' => NULL, // Note that this resource pointer is now NULL
  'null' => NULL,
)

var_dump ($debug_dump en el ejemplo anterior):

 array(8) {
  ["bool"]=>
  bool(false)
  ["int"]=>
  int(1)
  ["float"]=>
  float(3.14)
  ["string"]=>
  string(11) "hello world"
  ["array"]=>
  array(0) {
  }
  ["object"]=>
  object(stdClass)#1 (0) {
  }
  ["resource"]=>
  resource(4) of type (stream)
  ["null"]=>
  NULL
}

print_r ($debug_printr en el ejemplo anterior):

Array
(
    [bool] => 
    [int] => 1
    [float] => 3.14
    [string] => hello world
    [array] => Array
        (
        )

    [object] => stdClass Object
        (
        )

    [resource] => Resource id #4
    [null] => 
)

Advertencia: var_export no maneja referencias circulares

Si intentas volcar una variable con referencias circulares, llama var_export dará como resultado una advertencia de PHP:

 $circular = array();
 $circular['self'] =& $circular;
 var_export($circular);

Resultados en:

 Warning: var_export does not handle circular references in example.php on line 3
 array (
   'self' => 
   array (
     'self' => NULL,
   ),
 )

Ambos var_dump y print_r, por otro lado, dará salida a la cadena *RECURSION* al encontrar referencias circulares.


739
2017-09-26 13:38



También puedes hacer esto:

$dump = print_r($variable, true);

61
2017-09-26 13:27



También puedes intentar usar serialize() función, a veces es muy útil para la depuración de puprposes.


15
2017-09-29 02:41



también echo json_encode($dataobject); podría ser útil


10
2017-08-06 15:59



function return_var_dump(){
    //works like var_dump, but returns a string instead of printing it.
    $args=func_get_args(); //for <5.3.0 support ...
    ob_start();
    call_user_func_array('var_dump',$args);
    return ob_get_clean();
}

10
2017-11-10 13:44



Soy consciente de que esta pregunta es antigua, pero nadie mencionó este punto.

Desde el Manual de PHP:

Esta función muestra información estructurada sobre una o más expresiones que incluye su tipo y valor.

Entonces, aquí está el real versión de retorno de PHP var_dump(), que en realidad acepta una lista de argumentos de longitud variable.

function var_dump_str()
{
    $argc = func_num_args();
    $argv = func_get_args();

    if ($argc > 0) {
        ob_start();
        call_user_func_array('var_dump', $argv);
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }

    return '';
}

Aclamaciones.


7
2017-09-14 16:47