जावा PHP var_dump के बराबर क्या है?


127

PHP में एक var_dump () फ़ंक्शन है जो किसी ऑब्जेक्ट की आंतरिक सामग्री को आउटपुट करता है, जो ऑब्जेक्ट के प्रकार और सामग्री को दिखाता है।

उदाहरण के लिए:

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

उत्पादन होगा:

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

जावा में क्या समान है जो समान करेगा?


1
क्या आपने db4o आज़माया है? यह विशेष रूप से इसके लिए नहीं है, लेकिन मुझे लगता है कि यह पूरी तरह से काम करेगा;
कुंभ

जवाबों:


67

यह जावा में पके हुए के रूप में काफी नहीं है, इसलिए आपको यह मुफ्त में नहीं मिलता है। यह भाषा निर्माण के बजाय सम्मेलन के साथ किया जाता है। सभी डेटा ट्रांसफर कक्षाओं में (और शायद आपके द्वारा लिखे गए सभी वर्गों में भी ... ), आपको एक समझदार toStringतरीका लागू करना चाहिए । तो यहां आपको toString()अपनी Personकक्षा में ओवरराइड करने और वांछित स्थिति वापस करने की आवश्यकता है।

ऐसी उपयोगिताएँ उपलब्ध हैं जो एक अच्छी स्ट्रीडिंग विधि लिखने में मदद करती हैं, या अधिकांश IDE में स्वचालित toString()लेखन शॉर्टकट होता है।



Guava विकल्प और Intellij IDEA टेम्पलेट पर stackoverflow.com/questions/9444573/… को भी देखें ।
वडज़िम

31

मेरे अनुभव में, var_dump का उपयोग आमतौर पर कदम-हालांकि डीबगर के स्थान पर PHP डीबग करने के लिए किया जाता है। जावा में, आप किसी वस्तु की सामग्री का दृश्य प्रतिनिधित्व देखने के लिए अपने आईडीई डिबगर का उपयोग कर सकते हैं।


10
Yups, अधिकांश PHP या वेब डेवलपर डिबगिंग के बारे में भूल जाते हैं। क्योंकि वे ब्राउज़र में डिबग परिणाम देखना पसंद करते हैं।
GusDeCooL

10
आप अपने आईडीई के डिबगर का उपयोग नहीं कर सकते हैं, उदाहरण के लिए, आप एडोब एक्सपीरियंस मैनेजर के ब्राउज़र-आधारित संपादक में अपना जेएसपी कोड प्रोग्रामिंग कर रहे हैं। :(
ट्रेवर

हो सकता है कि हम इसका उपयोग लाइव फॉर्मेट में आपके प्रोग्राम के व्यवहार के परीक्षण के लिए HTML फॉर्मेट में vardump को प्रिंट करके कर सकते हैं।
ओमजी

18

आपके विकल्प toString()अपनी सामग्री की विधि को अपनी सामग्री को इस तरह से ओवरराइड करने के लिए करते हैं, जिसे आप पसंद करते हैं, या वस्तु का निरीक्षण करने के लिए प्रतिबिंब का उपयोग करते हैं (एक तरह से डिबगर क्या करते हैं)।

परावर्तन का उपयोग करने का लाभ यह है कि आपको अपनी व्यक्तिगत वस्तुओं को "संक्षिप्त" करने के लिए संशोधित करने की आवश्यकता नहीं होगी, लेकिन इसमें जटिलता भी है और यदि आपको नेस्टेड ऑब्जेक्ट समर्थन की आवश्यकता है तो आपको यह लिखना होगा।

यह कोड 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));
}

वह फ़ील्ड जो आप उपयोग कर रहे हैं, कहाँ से आयात किया गया है?
आरमिरंदा

3
java.lang.reflect.Field
हैरी लाइम

17

मुझे लगता है कि यह करने का सबसे अच्छा तरीका, google-gson (JSON को जावा ऑब्जेक्ट्स में बदलने के लिए एक जावा लाइब्रेरी और इसके विपरीत) का उपयोग कर रहा है

इसे डाउनलोड करें , अपनी परियोजना में "जार" फ़ाइल जोड़ें

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

आउटपुट:

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

आप किसी भी ऑब्जेक्ट (सरणियों, सूचियों और आदि) को JSON में परिवर्तित कर सकते हैं। मुझे लगता है, कि यह PHP के var_dump () का सबसे अच्छा एनालॉग है


4
दिलचस्प ... क्या आप जानते हैं कि यह एक स्थिर विधि क्यों नहीं है?
मिरेलॉन

2
आप इसे एक स्थिर विधि की तरह उपयोग कर सकते हैं: नया चर बनाने के बिना नया Gson ()। ToJson (...)।
अली मैमदोव

Imo, यह बेहतर है यदि आप इसे सीधे उपयोग करने के बजाय कस्टम उपयोगिता वर्ग में सार करते हैं, तो यह आपको थर्ड पार्टी निर्भरता को प्रबंधित करने के लिए लचीलापन देता है
MAYOBYO HASSAN

7

अपाचे कॉमन्स लैंग पैकेज एक ऐसा वर्ग प्रदान करता है जिसका उपयोग फ़ील्ड के मूल्यों को प्राप्त करने के लिए एक डिफ़ॉल्ट toString () विधि का उपयोग करने के लिए किया जा सकता है। बस पर एक नजर है इस



वे दोनों लिंक मृत हैं
बीलर


4

मुझे GSON का उपयोग करना पसंद है क्योंकि यह अक्सर उन परियोजनाओं के प्रकार पर निर्भर करता है जिन पर मैं काम कर रहा हूं:

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

या आपके द्वारा उपयोग किए जाने वाले किसी भी JSON लाइब्रेरी के लिए GSON स्थानापन्न करें।



0

आप XML क्रमांकन करते हैं, और आपको गहरी नेस्टेड वस्तुओं के भी बहुत साफ प्रतिनिधित्व मिलना चाहिए।


0

मुझे लगता है कि आप ऐसा ही कुछ कर सकते हैं एक सरल विधि बनाना है जो उस वस्तु को प्रिंट करता है जिसे आप देखना चाहते हैं। कुछ इस तरह:

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

यह var_dump () की तरह नहीं है, लेकिन आप अपने डीबगर आईडीई में जाने की आवश्यकता के बिना, इसका एक सामान्य विचार प्राप्त कर सकते हैं।


0

बस फ़ील्ड समाधान (सेट करने योग्य) पर जोड़ने के लिए ताकि आप किसी वस्तु के निजी चर का उपयोग कर सकें:

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

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.