পিএইচপি var_dump এর জাভা সমতুল্য কি?


127

পিএইচপি-তে একটি var_dump () ফাংশন থাকে যা কোনও অবজেক্টের অভ্যন্তরীণ সামগ্রীকে আউটপুট দেয়, কোনও সামগ্রীর প্রকার এবং সামগ্রী দেখায় content

উদাহরণ স্বরূপ:

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ক্লাসে ওভাররাইড করা এবং পছন্দসই অবস্থানে ফিরে আসা দরকার।

এমন কয়েকটি ইউটিলিটি রয়েছে যা একটি ভাল টসস্ট্রিং পদ্ধতি লেখার ক্ষেত্রে সহায়তা করে বা বেশিরভাগ আইডিইগুলির একটি স্বয়ংক্রিয় toString()লেখার শর্টকাট থাকে।



আরও দেখুন stackoverflow.com/questions/9444573/... পেয়ারা বিকল্প এবং Intellij ধারণা টেমপ্লেট উপর।
ভাদজিম

31

আমার অভিজ্ঞতায়, var_dump সাধারণত পিএইচপি ডিবাগ করার জন্য একটি ধাপ-তবু ডিবাগারের জায়গায় ব্যবহৃত হয়। জাভাতে, আপনি অবশ্যই কোনও আইডিটির ডিবাগারটি কোনও সামগ্রীর সামগ্রীর ভিজ্যুয়াল উপস্থাপনা দেখতে ব্যবহার করতে পারেন।


10
হ্যাঁ, বেশিরভাগ পিএইচপি বা ওয়েব বিকাশকারী ডিবাগিংয়ের কথা ভুলে যান। কারণ তারা ব্রাউজারে ডিবাগ ফলাফল দেখতে পছন্দ করে।
GusDeCooL

10
উদাহরণস্বরূপ, আপনি যদি অ্যাডোব এক্সপেরিয়েন্স ম্যানেজারের ব্রাউজার-ভিত্তিক সম্পাদকটিতে আপনার জেএসপি কোডটি প্রোগ্রামিং করে থাকেন তবে আপনি আপনার আইডিই এর ডিবাগারটি ব্যবহার করতে পারবেন না। :(
ট্রেভর

সম্ভবত আমরা এইচটিএমএল ফর্ম্যাটে ভারডাম্প মুদ্রণ করে লাইভ পরিবেশে আপনার প্রোগ্রামের আচরণের পরীক্ষা করতে এটি ব্যবহার করতে পারি।
ওএমজেগো

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

আমি মনে করি এটি করার সর্বোত্তম উপায়টি হ'ল গুগল-জিএসএন (জেএসএন কে জাভা বস্তুতে রূপান্তর করতে একটি জাভা গ্রন্থাগার এবং তদ্বিপরীত) ব্যবহার করছে

এটি ডাউনলোড করুন, আপনার প্রকল্পে "জার" ফাইল যুক্ত করুন

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"}

আপনি যেকোন বস্তুর (অ্যারে, তালিকা এবং ইত্যাদি) জেএসএনে রূপান্তর করতে পারেন। আমি মনে করি, এটি পিএইচপি'র ভার_ডাম্পের সেরা এনালগ ()


4
আকর্ষণীয় ... আপনি কি জানেন যে এটি স্থির পদ্ধতি নয় কেন?
মিরেলন

2
আপনি এটি স্ট্যাটিক পদ্ধতির মতো ব্যবহার করতে পারেন: নতুন গেসন ()। টুজসন (...) কোনও নতুন ভেরিয়েবল তৈরি না করেই।
আলী মমাদভ

তবে, আপনি যদি এটি সরাসরি ব্যবহারের চেয়ে কাস্টম ইউটিলিটি ক্লাসে বিমূর্ত করেন তবে এটি আরও ভাল, এটি আপনাকে তৃতীয় পক্ষের নির্ভরতা পরিচালিত করতে নমনীয়তা দেয়
মায়োব্যা হাসান

7

অ্যাপাচি কমন্স ল্যাং প্যাকেজ এমন শ্রেণি সরবরাহ করে যা ক্ষেত্রের মান পেতে প্রতিফলন ব্যবহার করে একটি ডিফল্ট টু স্ট্রিং () পদ্ধতি তৈরি করতে ব্যবহার করা যেতে পারে। শুধু এই একবার দেখুন ।


আপডেট হওয়া লিংকটি হচ্ছে কমন্স.এপাচি.আর.এল্যাং
এপি-

এই লিঙ্কগুলির উভয়ই মারা গেছে
বিলার


4

আমি জিএসএন ব্যবহার করতে পছন্দ করি কারণ এটি প্রায়শই আমি যে ধরণের প্রকল্পে কাজ করছি তার নির্ভরতা ইতিমধ্যে:

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

বা আপনি ব্যবহার করেন এমন অন্য কোনও JSON লাইব্রেরির জন্য GSON কে বিকল্পযুক্ত করুন।



0

আপনি এক্সএমএল সিরিয়ালাইজেশন করেছেন এবং গভীর ঘৃণ্য বস্তুর এমনকি আপনার খুব ঝরঝরে উপস্থাপনা পাওয়া উচিত।


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

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.