PHP var_dump'ın Java eşdeğeri nedir?


127

PHP, bir nesnenin dahili içeriğini çıkaran, bir nesnenin türünü ve içeriğini gösteren bir var_dump () işlevine sahiptir.

Örneğin:

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);

çıktı:

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

Java'da aynı şeyi yapacak eşdeğeri nedir?


1
db4o'yu denedin mi? özel olarak bunun için değil, ancak mükemmel çalışacağını düşünüyorum;
Aquarius Power

Yanıtlar:


67

Java'da pişirildiği kadar değil, bu yüzden bunu ücretsiz olarak alamazsınız. Dil yapıları yerine gelenekle yapılır. Tüm veri aktarım sınıflarında (ve belki yazdığınız tüm sınıflarda bile ... ), mantıklı bir toStringyöntem uygulamalısınız . Yani burada toString(), Personsınıfınızı geçersiz kılmanız ve istenen duruma geri dönmeniz gerekir.

Orada mevcut yardımları iyi toString yöntemi yazma, ya da çoğu IDE ile yardım otomatik olması toString()yazma kısayolu.



Guava alternatifi ve Intellij IDEA şablonu için stackoverflow.com/questions/9444573/… sayfasına da bakın .
Vadzim

31

Tecrübelerime göre, var_dump genellikle adım adım hata ayıklayıcı yerine PHP'de hata ayıklamak için kullanılır. Java'da, bir nesnenin içeriğinin görsel bir temsilini görmek için elbette IDE'nizin hata ayıklayıcısını kullanabilirsiniz.


10
Evet, çoğu PHP veya Web Geliştirici hata ayıklamayı unutur. Çünkü hata ayıklama sonucunu tarayıcıda görmeyi tercih ederler.
GusDeCooL

10
Örneğin, JSP kodunuzu Adobe Experience Manager'ın tarayıcı tabanlı düzenleyicisinde programlıyorsanız IDE'nizin hata ayıklayıcısını kullanamazsınız. :(
Trevor

Belki vardump'ı html formatında yazdırarak programınızın davranışını canlı ortamda test etmek için kullanabiliriz.
omjego

18

Alternatifleriniz, toString()nesnenizin içeriğini istediğiniz şekilde çıktılamak için yöntemini geçersiz kılmak veya nesneyi incelemek için yansıma kullanmaktır (hata ayıklayıcıların yaptığı gibi).

Yansımayı kullanmanın avantajı, tek tek nesnelerinizi "analiz edilebilir" olacak şekilde değiştirmenize gerek kalmamasıdır, ancak ek bir karmaşıklık vardır ve iç içe nesne desteğine ihtiyacınız varsa bunu yazmanız gerekir.

Bu kod, Object"o" için alanları ve değerlerini listeleyecektir.

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

Bu alan nedir, nereden ithal ediliyor?
RMiranda

3
java.lang.reflect.Field
Harry Lime

17

Bunu yapmanın en iyi yolunun google-gson kullanmak olduğunu düşünüyorum (JSON'u Java nesnelerine dönüştürmek için bir Java kitaplığı ve tam tersi)

İndirin , projenize "jar" dosyası ekleyin

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));

Çıktı:

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

Herhangi bir nesneyi (diziler, listeler vb.) JSON'a dönüştürebilirsiniz. Bence PHP'nin var_dump () en iyi analogu


4
İlginç ... bunun neden statik bir yöntem olmadığını biliyor musunuz?
mirelon

2
It'i statik bir yöntem gibi kullanabilirsiniz: new Gson (). ToJson (...) yeni bir değişken oluşturmadan.
Ali Mamedov

Imo, onu doğrudan kullanmak yerine özel bir yardımcı program sınıfına soyutlamanız daha iyidir, bu size üçüncü taraf bağımlılıklarını yönetme esnekliği sağlar
MAYOBYO HASSAN



4

GSON'u kullanmayı seviyorum çünkü genellikle üzerinde çalıştığım proje türlerine zaten bağlı:

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

Veya kullandığınız diğer JSON kitaplıklarının yerine GSON'u kullanın.



0

XML serileştirme yaparsınız ve derinlemesine iç içe geçmiş nesnelerin bile çok düzgün bir temsilini elde etmelisiniz.


0

Bence benzer bir şey, görmek istediğiniz nesneyi yazdıran basit bir yöntem oluşturmaktır. Bunun gibi bir şey:

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

Var_dump () ile aynı değildir, ancak hata ayıklayıcınızın IDE'sine gitmenize gerek kalmadan genel bir fikir edinebilirsiniz.


0

Bir nesnenin özel değişkenine erişebilmeniz için sadece Alan çözümünü (setAccessible) eklemek için:

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));
    } 

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.