Come ottenere xdebug var_dump per mostrare l'intero oggetto / array


310

Sto usando xdebug (php_xdebug-2.1.2-5.3-vc9.dll) su WAMP . Quando uso var_dumpsu un oggetto di grandi dimensioni o una variabile non mostra la variabile completa.

array
'node' => 
  array
    'my_form' => 
      array
        'form' => 
          array
            ...

Senza xdebug mostra come dovrebbe essere previsto. Ho guardato la documentazione ma non ho visto una soluzione. Qualcuno sa come posso risolvere questo problema in modo che xdebug var_dumpmostri l' oggetto completo ?


print_r stamperà l'array completo con tutti i valori nidificati.
Rashmi Jain,

Risposte:


603

Queste sono variabili configurabili in php.ini:

; with sane limits
xdebug.var_display_max_depth = 10
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 1024 


; with no limits
; (maximum nesting is 1023)
xdebug.var_display_max_depth = -1 
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1 

Naturalmente, questi possono anche essere impostati in fase di esecuzione tramite ini_set(), utile se non si desidera modificare php.ini e riavviare il server Web ma è necessario ispezionare rapidamente qualcosa di più approfondito.

ini_set('xdebug.var_display_max_depth', '10');
ini_set('xdebug.var_display_max_children', '256');
ini_set('xdebug.var_display_max_data', '1024');

Le impostazioni di Xdebug sono spiegate nella documentazione ufficiale .


19
Io sostengo che la a display_max_depthdi 5 non è sana se davvero ti aspetti di ottenere qualche informazione dal tuovar_dump
Ben Harold,

2
@BenHarold Cosa consiglieresti allora come impostazione?
Anriëtte Myburgh,

6
@ AnriëtteMyburgh Dipende molto dal tuo codice. Le matrici non complesse o JSON potrebbero andare bene con 5 - 10 è probabilmente più che adeguato, ma se si desidera esaminare in profondità gli oggetti del framework Symfony, si potrebbe stare meglio senza limiti. Nessun suggerimento è di taglia unica.
Michael Berkowski,

3
Ho visitato questa risposta più di dieci volte negli ultimi sei mesi. Grazie Michael Berkowski, sono per sempre in debito con te.
Lincoln Bergeson,

2
@LincolnBergeson Devo cercarlo sempre anch'io.
Michael Berkowski,

38

So che questo è un post molto vecchio, ma ho pensato che potrebbe essere ancora utile.

Se hai dimestichezza con la lettura del formato json, puoi sostituire var_dump con:

return json_encode($myvar);

Lo sto usando per aiutare a risolvere un servizio che sto costruendo che ha delle matrici profondamente annidate. Ciò restituirà ogni livello dell'array senza troncare nulla o richiedere di modificare il file php.ini.

Inoltre, poiché i dati json_encoded sono una stringa, significa che è possibile scriverli facilmente nel registro errori

error_log(json_encode($myvar));

Probabilmente non è la scelta migliore per ogni situazione, ma è una scelta!


12
Adoro questa risposta. Potresti anche avere un output HTML piuttosto simile a qualcosa del genere: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</pre>';
David,

7
Tieni presente che tutte le variabili potrebbero non essere json_encodeable. Gli oggetti che non implementano l'interfaccia jsonserializable restituiranno solo un array vuoto "{}"
Kristian Sandström,

2
Vale anche la pena notare che json_encoding qualcosa non ti mostrerà i tipi, quindi è più difficile identificare se qualcosa corrisponde in modo appropriato.
SEoF

13

Oppure puoi usare un'alternativa:

https://github.com/kint-php/kint

Funziona con zero set up e ha comunque molte più funzioni di var_dump di Xdebug. Per bypassare il limite nidificato al volo con Kint, basta usare

 +d( $variable ); // append `+` to the dump call

12

So che è tardi ma potrebbe essere di qualche utilità:

echo "<pre>";
print_r($array);
echo "</pre>";

21
print_r()non è un sostituto di var_dump.
AnrDaemon,

Risposte fantastiche. Grazie.
PHPst

@AnrDaemon sul serio?
PHPst

var_dump ([falso]); print_r ([falso]);
AnrDaemon il

So che è tardi ma - print_r () potrebbe assolutamente essere un sostituto di var_dump () a seconda di quello che vuoi! Non uso quasi mai più var_dump () perché spesso voglio mostrare strutture di array e IMO print_r () lo dimostra molto meglio di var_dump ().
bestprogrammerintheworld


3

Vorrei raccomandare var_export($array): non mostra i tipi, ma genera una sintassi che puoi usare nel tuo codice :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.