Perbedaan antara var_dump, var_export & print_r

126

Apa perbedaan antara var_dump, var_exportdan print_r?

Manish Trivedi
sumber
14
Terkadang lebih mudah untuk meminta orang lain untuk memahami lebih baik daripada membaca manual.
Deepak Lamichhane
11
@Jawaban Common Sense Anda SO seringkali lebih jelas, lebih ringkas, dapat ditindaklanjuti dan pada dasarnya selalu lebih mudah untuk dirujuk daripada manual PHP.
Mark Fox

Jawaban:

194

var_dump adalah untuk keperluan debugging. var_dumpselalu mencetak hasilnya.

// var_dump(array('', false, 42, array('42')));
array(4) {
  [0]=> string(0) ""
  [1]=> bool(false)
  [2]=> int(42)
  [3]=> array(1) {[0]=>string(2) "42")}
}

print_r juga untuk tujuan debugging, tetapi tidak termasuk tipe anggota. Ini adalah ide yang baik untuk digunakan jika Anda mengetahui jenis elemen dalam array Anda, tetapi bisa menyesatkan sebaliknya. print_rsecara default mencetak hasilnya, tetapi memungkinkan kembali sebagai string sebagai gantinya dengan menggunakan$returnparameteropsional.

Array (
    [0] =>
    [1] =>
    [2] => 42
    [3] => Array ([0] => 42)
)

var_export mencetak kode php yang valid. Berguna jika Anda menghitung beberapa nilai dan ingin hasilnya sebagai konstanta di skrip lain. Catatan yangvar_exporttidak dapat menangani siklus referensi / array rekursif, sedangkanvar_dumpdanprint_rperiksa ini. var_exportsecara default mencetak hasilnya, tetapi memungkinkan kembali sebagai string sebagai gantinya dengan menggunakan$returnparameteropsional.

array (
  0 => '',
  1 => false,
  2 => 42,
  3 => array (0 => '42',),
)

Secara pribadi, saya pikir var_exportadalah kompromi terbaik yang ringkas dan tepat.

phihag
sumber
51
Perhatikan bahwa var_export, karena sifatnya, akan mati kematian rekursif yang mengerikan pada, well, array rekursif. print_rdan var_dump(meskipun, tidak begitu yakin tentang yang terakhir, karena saya biasanya tidak menggunakannya) tidak memiliki masalah itu. Jadi jangan var_export($_GLOBALS);, misalnya (yang berisi dirinya sendiri). :)
pinkgothic
@trotter Saya selalu berpikir komentar akan menjelaskan keingintahuan itu dengan baik, tapi begitulah, menambahkan catatan singkat untuk jawabannya.
phihag
1
Harus ditambahkan bahwa Anda dapat membuat print_r () dan var_export () mengembalikan sebuah string alih-alih mengeluarkannya, sementara var_dump () tidak dapat melakukannya. Juga, saya tidak suka var_export () karena membingungkan - jika Anda mencoba untuk mengekspor SOMECONST konstan yang tidak terdefinisi, Anda hanya akan mendapatkan kembali string teks 'SOMECONST'. Jadi ia tidak akan mengatakan NULL, 0, "", tetapi itu benar-benar akan menganggap itu string (dan saya kira melempar PEMBERITAHUAN juga).
userfuser
1
var_export baik untuk mewakili string dengan aman, seperti perlindungan quote / backslash.
dkellner
1
Secara pribadi saya lebih suka var_dumpoutput. Sayang sekali itu tidak memungkinkan mengembalikan output sebagai string. Karena itu saya dapat menghubungkan sentimen @ iconoclast dalam komentar di atas. Tetapi harus memilih var_exportlebih var_dumpuntuk kasus penggunaan ini dapat diterima dengan saya. Untuk kelengkapan, perhatikan permintaan fitur terkait ini .
Paul van Leeuwen
3

var_dumpdan var_exporthubungkan seperti ini (dari manual )

var_export () mendapat informasi terstruktur tentang variabel yang diberikan. Ini mirip dengan var_dump () dengan satu pengecualian: representasi yang dikembalikan adalah kode PHP yang valid.

Mereka berbeda dari print_ryang var_dumpmengekspor lebih banyak informasi, seperti tipe data dan ukuran elemen.

Nanne
sumber