php - Come posso catturare il risultato di var_dump su una stringa?




5 Answers

Prova var_export

Puoi provare var_export - anche se non fornisce lo stesso output di var_dump , fornisce un secondo parametro $return che farà sì che restituisca l'output piuttosto che stamparlo:

$debug = var_export($my_var, true);

Perché?

Preferisco questo one-liner all'utilizzo di ob_start e ob_get_clean() . Trovo anche che l'output è un po 'più facile da leggere, dal momento che è solo il codice PHP.

La differenza tra var_dump e var_export è che var_export restituisce una "rappresentazione di stringa parsable di una variabile" mentre var_dump semplicemente scarica informazioni su una variabile. Ciò significa in pratica che var_export ti fornisce un codice PHP valido (ma potrebbe non fornirti altrettante informazioni sulla variabile, specialmente se stai lavorando con le resources ).

demo:

$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 differenza di output:

var_export ( $debug_export nell'esempio sopra):

 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 nell'esempio sopra):

 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 nell'esempio sopra):

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

    [object] => stdClass Object
        (
        )

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

var_export : var_export non gestisce riferimenti circolari

Se stai provando a scaricare una variabile con riferimenti circolari, chiamando var_export verrà visualizzato un avviso PHP:

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

Risultati in:

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

Sia var_dump che print_r , d'altra parte, *RECURSION* la stringa *RECURSION* quando incontrano riferimenti circolari.

php string var-dump

Mi piacerebbe catturare l'output di var_dump su una stringa.

I documenti PHP dicono;

Come per tutto ciò che produce il risultato direttamente nel browser, le funzioni di controllo dell'output possono essere utilizzate per acquisire l'output di questa funzione e salvarlo in una stringa (ad esempio).

Qualcuno può darmi un esempio di come potrebbe funzionare?

print_r() non è una possibilità valida perché non mi darà le informazioni di cui ho bisogno.




Puoi anche provare a utilizzare la funzione serialize() , a volte è molto utile per il debug delle puproves.




Anche echo json_encode($dataobject); potrebbe essere utile




Se vuoi dare un'occhiata ai contenuti delle variabili durante il runtime, considera l'uso di un debugger reale come XDebug. In questo modo non hai bisogno di rovinare il tuo codice sorgente e puoi usare un debugger anche mentre i normali utenti visitano la tua applicazione. Non se ne accorgeranno.




Questo forse è un po 'fuori tema.

Stavo cercando un modo per scrivere questo tipo di informazioni nel log Docker del mio contenitore PHP-FPM e ho trovato lo snippet qui sotto. Sono sicuro che questo può essere usato dagli utenti di PHP-FPM di Docker.

fwrite(fopen('php://stdout', 'w'), var_export($object, true));



Related