Saya ingin menangkap output dari var_dump
sebuah string.
Dokumentasi PHP mengatakan;
Seperti apa pun yang menampilkan hasilnya langsung ke browser, fungsi kontrol-output dapat digunakan untuk menangkap output dari fungsi ini, dan menyimpannya dalam string (misalnya).
Apa yang akan menjadi contoh bagaimana cara kerjanya?
print_r()
bukan kemungkinan yang valid, karena itu tidak akan memberi saya informasi yang saya butuhkan.
strip_tags()
, ini hanya akan mengembalikan jenis dan nilai.Mencoba
var_export
Anda mungkin ingin check out
var_export
- meskipun tidak memberikan output yang sama sepertivar_dump
itu memberikan$return
parameter kedua yang akan menyebabkannya mengembalikan output daripada mencetaknya:Mengapa?
Saya lebih suka one-liner ini menggunakan
ob_start
danob_get_clean()
. Saya juga menemukan bahwa outputnya sedikit lebih mudah dibaca, karena itu hanya kode PHP.Perbedaan antara
var_dump
danvar_export
adalah yangvar_export
mengembalikan "representasi string parsable dari variabel" sementaravar_dump
hanya membuang informasi tentang suatu variabel. Apa artinya ini dalam praktiknya adalah yangvar_export
memberi Anda kode PHP yang valid (tetapi mungkin tidak memberi Anda informasi sebanyak mungkin tentang variabel, terutama jika Anda bekerja dengan sumber daya ).Demo:
Perbedaan dalam output:
var_export (
$debug_export
dalam contoh di atas):var_dump (
$debug_dump
dalam contoh di atas):print_r (
$debug_printr
dalam contoh di atas):Peringatan:
var_export
tidak menangani referensi melingkarJika Anda mencoba untuk membuang variabel dengan referensi melingkar, panggilan
var_export
akan menghasilkan peringatan PHP:Hasil dalam:
Keduanya
var_dump
danprint_r
, di sisi lain, akan menampilkan string*RECURSION*
ketika menemukan referensi melingkar.sumber
int(1)
sementara var_export hanya mencetak1
.var_export
tidak benar-benar baik untuk debugging karena Anda tidak bisa melakukan pencarian peramban untuk(int)
atau (string) `dan lain-lain juga Mangles banyak informasi ke dalam sebuah ruang kecil, hanya mencoba:var_export(''); var_export('\'');
. Dan yang paling penting, bersiap-siap untuk kesalahan PHP Fatal: Tingkat Nesting terlalu dalam - ketergantungan rekursif? di C: \ path \ file.php on line 75Anda juga bisa melakukan ini:
sumber
print_r
mana saya bisa, tetapi sayangnya terkadang tidak memberikan informasi yang cukup. Misalnya, karena dilemparkan ke string di mana ia bisa, keduanyafalse
dannull
ditampilkan sebagai string kosong. Dalam kasus di mana saya peduli tentang perbedaan antara ini, saya akan dengan enggan menggunakanvar_dump
atauvar_export
.Anda juga dapat mencoba menggunakan
serialize()
fungsi ini. Terkadang ini sangat berguna untuk keperluan debugging.sumber
error_log
itu, Anda sebaiknya tidak menggunakan solusi ini, karena keluaran serialisasi dapat mengandung byte nol danerror_log
memotong string yang mengandung byte nol .sumber
Juga
echo json_encode($dataobject);
mungkin bisa membantusumber
json_encode
tidak akan berisi semua datavar_dump
(sebagai tipe variabel misalnya).json_encode
menampilkan informasi yang sama denganprint_R
, dalam format yang berbeda.var_dump
. Dia juga menyatakan bahwaprint_R
menyediakan informasi tidak cukup untuk kebutuhannya. Tidak ada perbedaan nyata dalam informasi yang disediakan olehjson_encode
danprint_r
- hanya format data yang berbeda. Mengingat ini, jikaprint_r
tidak cukup, demikian jugajson_encode
. Tolong jangan mengeluh tentang downvote lagi. Jelas itu bukan sekadar klik acak, jadi atasi saja.Dari manual PHP :
Jadi, inilah versi pengembalian nyata PHP
var_dump()
, yang sebenarnya menerima daftar argumen panjang variabel:sumber
$argc
cek di sini adalah tidak perlu dan bisa dibilang salah karena keluar menunjuk oleh @hanshenrik, dan setelah Anda mengambilnya semua Anda benar-benar menambahkan adalahcall_user_func_array
danfunc_get_args
panggilan.Jika Anda ingin melihat konten variabel selama runtime, pertimbangkan untuk menggunakan debugger nyata seperti XDebug. Dengan begitu Anda tidak perlu mengacaukan kode sumber Anda, dan Anda dapat menggunakan debugger bahkan ketika pengguna normal mengunjungi aplikasi Anda. Mereka tidak akan memperhatikan.
sumber
Berikut adalah solusi lengkap sebagai fungsi:
sumber
Ini mungkin agak keluar dari topik.
Saya sedang mencari cara untuk menulis informasi semacam ini ke log Docker dari wadah PHP-FPM saya dan muncul dengan potongan di bawah ini. Saya yakin ini bisa digunakan oleh pengguna Docker PHP-FPM.
sumber
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
Saya sangat suka
var_dump()
keluaran verbose dan tidak puas denganvar_export()
atauprint_r()
keluaran 's karena tidak memberikan banyak informasi (misalnya jenis data yang hilang, panjang hilang).Untuk menulis kode yang aman dan dapat diprediksi, kadang-kadang berguna untuk membedakan antara string kosong dan nol. Atau antara 1 dan true. Atau antara nol dan salah. Jadi saya ingin tipe data saya di output.
Meskipun bermanfaat, saya tidak menemukan solusi bersih dan sederhana dalam respons yang ada untuk mengubah output berwarna
var_dump()
menjadi output yang dapat dibaca manusia menjadi string tanpa tag html dan termasuk semua detail darivar_dump()
.Perhatikan bahwa jika Anda memiliki warna
var_dump()
, itu berarti Anda telah menginstal Xdebug yang menimpa default phpvar_dump()
untuk menambahkan warna html.Untuk alasan itu, saya membuat variasi kecil ini memberikan apa yang saya butuhkan:
Mengembalikan string yang bagus di bawah ini:
Semoga ini bisa membantu seseorang.
sumber
Dari http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () hanya dapat menghapus data terakhir yang dimasukkan ke buffer internal. Jadi metode ob_get_contents akan berguna jika Anda memiliki beberapa entri.
Dari sumber yang sama seperti di atas:
sumber
Tali panjang : Cukup gunakan
echo($var);
sajadump($var);
.Obyek atau Array :
var_dump('<pre>'.json_encode($var).'</pre>);'
sumber