Apa yang setara dengan Java var_dump PHP?


127

PHP memiliki fungsi var_dump () yang menampilkan konten internal suatu objek, menampilkan jenis dan konten objek.

Sebagai contoh:

class Person {
  private $firstName;
  private $lastName;

  public function __construct($firstName, $lastName) {
    $this->firstName = $firstName;
    $this->lastName = $lastName;
  }
}

$person = new Person('Jon', 'Smith');
var_dump($person);

akan menampilkan:

object(Person)#1 (2) {
  ["firstName:private"]=>
  string(3) "Jon"
  ["lastName:private"]=>
  string(5) "Smith"
}

Apa yang setara di Jawa yang akan melakukan hal yang sama?


1
Sudahkah Anda mencoba db4o? ini tidak khusus untuk ini, tetapi saya pikir akan bekerja dengan sempurna;
Aquarius Power

Jawaban:


67

Ini tidak cukup seperti dipanggang di Jawa, jadi Anda tidak mendapatkan ini secara gratis. Ini dilakukan dengan konvensi daripada konstruksi bahasa. Di semua kelas transfer data (dan mungkin bahkan di semua kelas yang Anda tulis ... ), Anda harus menerapkan yang masuk akaltoString metode yang . Jadi di sini Anda perlu menimpa toString()di Personkelas Anda dan mengembalikan negara yang diinginkan.

Ada beberapa utilitas yang tersedia untuk membantu menulis metode toString yang baik, atau sebagian besar IDE memiliki toString()pintasan penulisan otomatis .



Lihat juga stackoverflow.com/questions/9444573/… tentang alternatif Guava dan template Intellij IDEA.
Vadzim

31

Dalam pengalaman saya, var_dump biasanya digunakan untuk debugging PHP di tempat debugger langkah-meskipun. Di Jawa, tentu saja Anda dapat menggunakan debugger IDE Anda untuk melihat representasi visual dari konten suatu objek.


10
Yups, sebagian besar Pengembang PHP atau Web lupa tentang debugging. Karena mereka lebih suka melihat hasil debug di browser.
GusDeCooL

10
Anda tidak dapat menggunakan debugger IDE Anda jika, misalnya, Anda memprogram kode JSP Anda di editor berbasis browser Adobe Experience Manager. :(
Trevor

Mungkin kita dapat menggunakannya untuk menguji perilaku program Anda di lingkungan langsung dengan mencetak vardump dalam format html.
omjego

18

Alternatif Anda adalah mengesampingkan toString()metode objek Anda untuk menampilkan kontennya dengan cara yang Anda sukai, atau menggunakan refleksi untuk memeriksa objek (dengan cara yang mirip dengan apa yang dilakukan oleh para penentang).

Keuntungan menggunakan refleksi adalah bahwa Anda tidak perlu memodifikasi objek individual Anda untuk menjadi "analysable", tetapi ada kompleksitas tambahan dan jika Anda memerlukan dukungan objek bersarang Anda harus menulis itu.

Kode ini akan mencantumkan bidang dan nilainya untuk Object"o"

Field[] fields = o.getClass().getDeclaredFields();
for (int i=0; i<fields.length; i++)
{
    System.out.println(fields[i].getName() + " - " + fields[i].get(o));
}

bidang apa yang Anda gunakan, diimpor dari mana?
RMiranda

3
java.lang.reflect.Field
Harry Lime

17

Saya pikir cara terbaik untuk melakukannya adalah menggunakan google-gson (Pustaka Java untuk mengonversi JSON menjadi objek Java dan sebaliknya)

Unduh , tambahkan file "jar" ke proyek Anda

HashMap<String, String> map = new HashMap<String, String>();

map.put("key_1", "Baku");
map.put("key_2", "Azerbaijan");
map.put("key_3", "Ali Mamedov");

Gson gson = new Gson();

System.out.println(gson.toJson(map));

Keluaran:

{"key_3":"Ali Mamedov","key_2":"Azerbaijan","key_1":"Baku"}

Anda dapat mengonversi objek apa pun (array, daftar, dan lain-lain) menjadi JSON. Saya pikir, itu adalah analog terbaik dari PHP var_dump ()


4
Menarik ... tahukah Anda mengapa ini bukan metode statis?
mirelon

2
Anda dapat menggunakannya seperti metode statis: new Gson (). ToJson (...) tanpa membuat variabel baru.
Ali Mamedov

Imo, lebih baik jika Anda abstrakkan ke kelas utilitas khusus daripada menggunakannya secara langsung, ini memberi Anda fleksibilitas untuk mengelola dependensi pihak ketiga
MAYOBYO HASSAN



4

Saya suka menggunakan GSON karena seringkali sudah menjadi ketergantungan dari jenis proyek yang saya kerjakan:

public static String getDump(Object o) {
    return new GsonBuilder().setPrettyPrinting().create().toJson(o);
}

Atau gantikan GSON untuk perpustakaan JSON lain yang Anda gunakan.



0

Anda XMLisasi serialisasi, dan Anda harus mendapatkan representasi yang sangat rapi bahkan dari objek yang sangat bersarang.


0

Saya pikir hal serupa yang dapat Anda lakukan adalah membuat metode sederhana yang mencetak objek yang ingin Anda lihat. Sesuatu seperti ini:

public static void dd(Object obj) { System.out.println(obj); }

Ini tidak sama seperti var_dump (), tetapi Anda bisa mendapatkan gambaran umum tentang itu, tanpa harus pergi ke IDE debugger Anda.


0

Hanya untuk addup pada solusi Field (setAccessible) sehingga Anda dapat mengakses variabel pribadi dari suatu objek:

public static void dd(Object obj) throws IllegalArgumentException, IllegalAccessException {
    Field[] fields = obj.getClass().getDeclaredFields();
    for (int i=0; i<fields.length; i++)
    {
        fields[i].setAccessible(true);
        System.out.println(fields[i].getName() + " - " + fields[i].get(obj));
    } 

}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.