PHP में heredoc का उपयोग करने का क्या फायदा है , और क्या आप एक उदाहरण दिखा सकते हैं?
PHP में heredoc का उपयोग करने का क्या फायदा है , और क्या आप एक उदाहरण दिखा सकते हैं?
जवाबों:
Heredoc सिंटैक्स मेरे लिए बहुत क्लीनर है और यह बहु-पंक्ति स्ट्रिंग्स के लिए वास्तव में उपयोगी है और मुद्दों को उद्धृत करने से बचता है। दिन में वापस मैं उन्हें एसक्यूएल प्रश्नों का निर्माण करने के लिए इस्तेमाल किया:
$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";
उपरोक्त के साथ pProblem वाक्यविन्यास त्रुटि है (गायब बची हुई बोली) मुझे यहाँ दस्तावेज़ वाक्य विन्यास के विपरीत प्रस्तुत किया गया है:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
यह थोड़ी शैली है, लेकिन मैं निम्नलिखित, एकल, दोहरे और यहाँ दस्तावेजों को स्ट्रिंग परिभाषित करने के लिए नियमों के रूप में उपयोग करता हूं:
'no variables here'
"Today is ${user}'s birthday"
--ansi
अनुपालन मोड में नहीं चलता है। SQL स्ट्रिंग्स को एकल उद्धरण का उपयोग करना चाहिए ।
SELECT * FROM "order" WHERE "table"='1'
बढ़ी हुई पठनीयता और स्थिरता के कारण हेरेडोक उद्धृत तारों का एक बेहतरीन विकल्प है। आपको उद्धरण और (अच्छे) आईडीई से बचने की जरूरत नहीं है या पाठ संपादक उचित सिंटैक्स हाइलाइटिंग का उपयोग करेंगे।
एक बहुत ही सामान्य उदाहरण: PHP के भीतर से HTML बाहर गूँज रहा है:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// Sometime later
echo $html;
यह पढ़ना आसान है और बनाए रखना आसान है।
विकल्प उद्धृत स्ट्रिंग की गूंज है, जो समाप्त होने वाले उद्धरण से युक्त है और IDEs उस भाषा के लिए वाक्यविन्यास को उजागर नहीं करने जा रहे हैं, जिससे खराब पठनीयता और रखरखाव में अधिक कठिनाई होती है।
आपके सामान्य ज्ञान का अद्यतन उत्तर
बेशक आप HTML के रूप में हाइलाइट की गई SQL क्वेरी नहीं देखना चाहेंगे। अन्य भाषाओं का उपयोग करने के लिए, बस वाक्य रचना में भाषा बदलें:
$sql = <<<SQL
SELECT * FROM table
SQL;
कुछ आईडीई कोड को हाइरेडॉक स्ट्रिंग्स में स्वचालित रूप से हाइलाइट करते हैं - जो एक्सएमएल या एचटीएमएल के लिए हेरेडोक का उपयोग नेत्रहीन अपील करता है।
मैं व्यक्तिगत रूप से इसे यानी XML के लंबे हिस्सों के लिए पसंद करता हूं क्योंकि मुझे उद्धरण वर्णों को उद्धृत करने की परवाह नहीं है और बस XML को पेस्ट कर सकते हैं।
सबसे पहले, सभी कारण व्यक्तिपरक हैं। यह एक कारण के बजाय स्वाद के मामले की तरह अधिक है।
व्यक्तिगत रूप से, मुझे हेरेडोक काफी बेकार लगता है और इसका उपयोग कभी-कभार किया जाता है, अधिकांश समय जब मुझे कुछ HTML प्राप्त करने की आवश्यकता होती है और उदाहरण के लिए HTML ईमेल संदेश बनाने के लिए आउटपुट बफरिंग से परेशान नहीं होना चाहता।
फ़ॉर्मेटिंग सामान्य इंडेंटेशन नियमों के अनुकूल नहीं है, लेकिन मुझे नहीं लगता कि यह एक बड़ी बात है।
//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';
मुझे नहीं पता कि मैं कहूंगा कि आनुवंशिकता आलस्य है। कोई कह सकता है कि कुछ भी करना आलस्य है, क्योंकि कुछ भी करने के लिए हमेशा अधिक बोझिल तरीके होते हैं।
उदाहरण के लिए, कुछ स्थितियों में आप पाठ को आउटपुट करना चाह सकते हैं, बिना एम्बेडेड चर के साथ एक फ़ाइल से लाने और एक टेम्पलेट को चलाने के लिए। हेरेडोक आपको उद्धरणों से बचने के लिए अनुमति देता है, इसलिए आपके द्वारा देखा गया पाठ वह पाठ है जो आप आउटपुट करते हैं। स्पष्ट रूप से कुछ नकारात्मक हैं, उदाहरण के लिए, आप अपने वंशानुगत को इंडेंट नहीं कर सकते हैं, और यह निश्चित स्थिति में निराशा प्राप्त कर सकता है, खासकर यदि आपका एकीकृत सिंटैक्स के लिए एक स्टिकर, जो मैं हूं।