পিএইচপি-তে হেরডোক ব্যবহার করে কী সুবিধা? [বন্ধ]


196

পিএইচপি-তে হেরডোক ব্যবহার করার সুবিধা কী এবং আপনি একটি উদাহরণ দেখাতে পারেন?


4
কোনও শক্ত কারণ নেই যে বিকল্পগুলি হেরডোকের চেয়ে ভাল
শক্তি সিং

18
আমি এটিকে আরও গঠনমূলক হিসাবে সম্পাদনা করেছি এবং প্রশ্ন সম্প্রদায়ের উইকি তৈরি করেছি কারণ এটি যথেষ্ট বিষয়গত j দ্রষ্টব্য, সম্প্রদায়টি এখনও এটি বন্ধ করে দিতে পারে, আমি এটি উন্মুক্ত রেখে নির্বাচিত করেছি কারণ আপনি মানসম্পন্ন উত্তর পেয়ে যাচ্ছেন।
টিম পোস্ট

9
কেন এই প্রশ্নটি গঠনমূলক হিসাবে বিবেচিত হয় না?
অ্যাম্বো 100

উত্তর:


218

হেরডোক সিনট্যাক্সটি আমার কাছে অনেক বেশি ক্লিনার এবং এটি বহু-লাইন স্ট্রিং এবং উদ্ধৃত ইস্যুগুলি এড়ানোর জন্য সত্যই কার্যকর। সেদিন আমি এসকিউএল কোয়েরিগুলি তৈরি করতে তাদের ব্যবহার করেছি:

$sql = <<<SQL
select *
  from $tablename
 where id in [$order_ids_list]
   and product_name = "widgets"
SQL;

আমার কাছে এটিতে কোটেশন ব্যবহারের চেয়ে সিনট্যাক্স ত্রুটি প্রবর্তনের কম সম্ভাবনা রয়েছে:

$sql = "
select *
  from $tablename
 where id in [$order_ids_list]
   and product_name = \"widgets\"
";

আরেকটি বিষয় হ'ল আপনার স্ট্রিংয়ে ডাবল উদ্ধৃতিগুলি এড়িয়ে যাওয়া:

$x = "The point of the \"argument" was to illustrate the use of here documents";

উপরোক্ত পিপ্রব্লেমটি সিনট্যাক্স ত্রুটি (নিখোঁজ হওয়া উদ্ধৃতি উদ্ধৃতি) আমি এখানে ডকুমেন্ট সিনট্যাক্সের বিপরীতে হিসাবে কেবল পরিচয় করিয়েছি:

$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;

এটি কিছুটা স্টাইল, তবে আমি স্ট্রিং সংজ্ঞায়িত করার জন্য একক, ডাবল এবং এখানে নথির নিয়ম হিসাবে নিম্নলিখিতটি ব্যবহার করি:

  • একক উদ্ধৃতি ব্যবহৃত হয় যখন স্ট্রিংটি ধ্রুবক মত হয়'no variables here'
  • ডাবল উদ্ধৃতি যখন আমি একক লাইনে স্ট্রিং রাখতে পারি এবং ভেরিয়েবল ইন্টারপোলেশন বা এম্বেড থাকা একক উদ্ধৃতি প্রয়োজন"Today is ${user}'s birthday"
  • এখানে বহু-লাইন স্ট্রিংয়ের জন্য দস্তাবেজগুলির জন্য ফর্ম্যাট এবং ভেরিয়েবল ইন্টারপোলেশন প্রয়োজন।

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

17
@ মারিও এটি সাধারণভাবে ডাবল উদ্ধৃতি ব্যবহার করে সমস্যার স্কেল এর নির্দিষ্টকরণ সম্পর্কে নয়
ওয়েস

4
ভেরিয়েবলগুলি সরাসরি ক্যোয়ারিতে স্থাপন করা একটি খারাপ, খারাপ আচরণ :
আপনার সাধারণ সংবেদন

5
@Wes এবং This @mario ANSI এসকিউএল হল:SELECT * FROM "order" WHERE "table"='1'
programaths

11
"এটা বলার অপেক্ষা রাখে না যে ভেরিয়েবলগুলি সরাসরি ক্যোয়ারিতে স্থাপন করা একটি খারাপ, খারাপ আচরণ"। এই সব সত্য নয়। এসকিউএল স্টেটমেন্টগুলিতে অ-বৈধতাযুক্ত ইনপুট স্থাপন করা "খারাপ আচরণ"। এসকিউএল স্টেটমেন্টের মধ্যে ভেরিয়েবল স্থাপন করা কখনও কখনও প্রয়োজনীয় হয়।
ভোগোম্যাটিক্স

67

বর্ধিত পাঠযোগ্যতা এবং রক্ষণাবেক্ষণের কারণে হেরাদোকগুলি উদ্ধৃত স্ট্রিংয়ের দুর্দান্ত বিকল্প। আপনাকে উদ্ধৃতিগুলি এড়াতে হবে না এবং (ভাল) আইডিই বা পাঠ্য সম্পাদকরা সঠিক সিনট্যাক্স হাইলাইটিং ব্যবহার করবে।

একজন খুব সাধারণ উদাহরণ: পিএইচপি মধ্যে থেকে বের এইচটিএমএল অনুনাদী:

$html = <<<HTML
  <div class='something'>
    <ul class='mylist'>
      <li>$something</li>
      <li>$whatever</li>
      <li>$testing123</li>
    </ul>
  </div>
HTML;

// Sometime later
echo $html;

এটি পড়া সহজ এবং বজায় রাখা সহজ।

বিকল্পটি উদ্ধৃত স্ট্রিংগুলি প্রতিধ্বনিত করছে, যা শেষ পর্যন্ত পালানো উক্তি এবং আইডিইগুলি সেই ভাষার জন্য সিনট্যাক্সটি হাইলাইট করবে না, যা নিম্নতর পাঠযোগ্যতা এবং রক্ষণাবেক্ষণে আরও অসুবিধার দিকে পরিচালিত করে।

আপনার সাধারণ জ্ঞানের জন্য আপডেট উত্তর

অবশ্যই আপনি এইচটিএমএল হিসাবে হাইলাইট করা কোনও এসকিউএল কোয়েরি দেখতে চাইবেন না। অন্যান্য ভাষা ব্যবহার করতে, বাক্য গঠন বাক্যটিতে কেবল ভাষাটি পরিবর্তন করুন:

$sql = <<<SQL
       SELECT * FROM table
SQL;

1
আপনি কি পিএইচপি'র " পিএইচপি থেকে পালানোর " বৈশিষ্ট্যটি জানবেন ?
আপনার কমন সেন্স

5
পিএইচপি থেকে পালানো কখনও কখনও ঠিক থাকে তবে আপনি যখন প্রচুর স্টাফ প্রতিধ্বনিত করেন তখন আপনার সিনট্যাক্স হাইলাইট হয়ে যায়, আপনাকে পিএইচপি থেকে সরলভাবে আরও বেশি অক্ষর লিখতে হয় এবং পিএইচপি-তে একটি একক প্রতিধ্বনি পরিবর্তে কার্যকর করার জন্য আরও কমান্ড থাকে। এছাড়াও, আপনি একটি ভেরিয়েবলে একটি হেরডোক স্ট্রিং সেট করতে পারেন এবং এটি পরে প্রতিধ্বনিত করতে পারেন। আপনার এইচটিএমএলের জন্য পিএইচপি ত্যাগ করার অর্থ এটি তখন এবং সেখানে মুদ্রিত হয়ে যায়। এটি পরে সংরক্ষণ করতে পারবেন না।
জেক উইলসন

2
1. আপনি আউটপুট সংরক্ষণ করতে আউটপুট বাফারিং ব্যবহার করতে পারেন। ২. আপনি আপনার প্রথম উদাহরণে প্রতিধ্বনি ব্যবহার করছিলেন। ৩. (ভাল) আইডিই বা পাঠ্য সম্পাদকরা যখন আপনি পিএইচপি থেকে পালাতে ব্যবহার করছেন তখন এইচটিএমএল হাইলাইটিং বিরতি দেয় না । ৪. হেরডোকের জন্য কোন আইডিই সিনট্যাক্স হাইলাইট করে এবং কোন ভাষার নিয়ম ব্যবহার করা হয়? এইচটিএমএল পাঠ্য হিসাবে হাইলাইট করা কোনও এসকিউএল কোয়েরিটি কি ঠিক আছে?
আপনার প্রচলিত সংবেদন

1
একটি হেরাদোক একটি পিএইচপি স্ট্রিং। অবশ্যই আপনি স্ট্রিংয়ে নিয়ন্ত্রণ কাঠামো ব্যবহার করতে পারবেন না। php.net/manual/en/language.types.string.php
জ্যাক উইলসন

11
আমি মনে করি আপনি কেবলমাত্র এইচটিএমএলের স্ট্রিংগুলিতে প্রয়োগ করতে হেরডোককে ভুল বুঝেছেন। হেরাদোকস কেবল স্ট্রিং সংজ্ঞায়নের একটি বিকল্প উপায়, এটি HTML বা এসকিউএল কোয়েরি বা আপনার যা কিছু হোক না কেন। এগুলি লিখতে এবং বজায় রাখা সহজ, উপরের ওয়েসের উত্তরটি দেখায় যে বেশ স্পষ্টতই (যা আপনি যদি খেয়াল করেন যে সঠিক বাক্য গঠনটি হাইলাইট করেছে Net নেটবিয়ান ব্যর্থ হওয়া সম্পর্কে আমার কাছে অভিযোগ করবেন না)। আমি নিশ্চিত নই কেন আপনি কেন একটি সম্প্রদায়ের উইকি প্রশ্নের উত্তর ডাউন-ভোটিংয়ের পক্ষে এতটা বাঁকা মনে হচ্ছে ... বিশ্বাস করুন বা না বিশ্বাস করুন, মূল পিএইচপি বিকাশকারীরা হেরডোকের পিএইচপিতে অন্তর্ভুক্ত থাকতে পারে কারণ এটি কিছু ক্ষেত্রে সম্ভবত কার্যকর হতে পারে .. ।
জ্যাক উইলসন

8

কিছু আইডিই হেরেডোক স্ট্রিংগুলিতে কোডটি স্বয়ংক্রিয়ভাবে হাইলাইট করে - যা এক্সএমএল বা এইচটিএমএলকে দৃষ্টি আকর্ষণীয় করে তোলে he

আমি ব্যক্তিগতভাবে এটি এক্সএমএল এর দীর্ঘ অংশের জন্য পছন্দ করি যেহেতু আমার উদ্ধৃতি চরিত্রগুলি উদ্ধৃত করার বিষয়ে যত্ন নেওয়ার দরকার নেই এবং কেবল এক্সএমএল পেস্ট করতে পারি।


6

প্রথমত, সমস্ত কারণ বিষয়গত হয়। এটি কারণ হিসাবে বরং স্বাদের বিষয় মত।

ব্যক্তিগতভাবে, আমি হেরডোককে বেশ অকেজো বলে মনে করি এবং মাঝে মাঝে এটি ব্যবহার করি, যখন বেশিরভাগ সময় আমাকে কিছু পরিবর্তনশীল হিসাবে এইচটিএমএল পাওয়ার প্রয়োজন হয় এবং উদাহরণস্বরূপ একটি এইচটিএমএল ইমেল বার্তা গঠনের জন্য আউটপুট বাফারিংয়ের সাথে বিরক্ত করতে চাই না।

ফর্ম্যাট করা সাধারণ ইনডেন্টেশন নিয়মের সাথে খাপ খায় না, তবে আমি মনে করি এটি কোনও বড় বিষয় নয়।

       //some code at it's proper level
       $this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
       $this->title = "Feedback";
       //and so on

গ্রহণযোগ্য উত্তরের উদাহরণ হিসাবে, এটি নিছক প্রতারণামূলক।
স্ট্রিং উদাহরণগুলি, প্রকৃতপক্ষে, যদি কেউ তাদের সাথে প্রতারণা না করে তবে আরও সংক্ষিপ্ত হওয়া

$sql = "SELECT * FROM $tablename
        WHERE id in [$order_ids_list]
        AND product_name = 'widgets'";

$x = 'The point of the "argument" was to illustrate the use of here documents';

3

আমি জানি না যে আমি বলব হেরিডোক অলসতা। কেউ বলতে পারেন যে কোনও কিছু করা অলসতা, কারণ যে কোনও কিছু করার জন্য সবসময় আরও জটিল উপায় রয়েছে।

উদাহরণস্বরূপ, নির্দিষ্ট পরিস্থিতিতে আপনি এম্বেড ভেরিয়েবলের সাথে ফাইল থেকে আনতে এবং টেমপ্লেট প্রতিস্থাপন না করে পাঠ্য আউটপুট করতে চাইতে পারেন। হেরাদোক আপনাকে উদ্ধৃতিগুলি এড়িয়ে যাওয়ার অনুমতি দেয়, সুতরাং আপনি যে পাঠ্যটি দেখছেন তা হ'ল আউটপুট। স্পষ্টতই কিছু নেতিবাচকতা রয়েছে, উদাহরণস্বরূপ, আপনি আপনার বংশগতিতে যুক্ত করতে পারবেন না এবং এটি কিছু পরিস্থিতিতে হতাশ হয়ে উঠতে পারে, বিশেষত যদি আপনার ইউনিফাইড সিনট্যাক্সের জন্য একটি স্টিকারার, যা আমি।

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