हर लाइन पर क्यों <? Php और?> है


24

मैंने इस सम्मेलन को हर जगह बहुत देखा है, और कई बार, यह मुझे पागल करने के करीब आता है:

<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; // end of the loop. ?>

जहाँ <?phpऔर बंद ?>करना हर एक पंक्ति पर होता है, भले ही कोई हस्तक्षेप करने वाला HTML कोड न हो।

मेरा सवाल है: क्यों? इन सभी अतिरिक्त टैग को शामिल क्यों करें?

मेरे लिए, ऐसा लगता है कि यह सम्मेलन कोड के लिए अव्यवस्था की एक महत्वपूर्ण राशि जोड़ता है, पहली जगह में पालन करने के लिए परेशान है, और जोड़ता है कि कई और जगहों पर गलती से एक उद्घाटन या समापन टैग को छोड़ दें।

ध्यान दें

यह कोड ट्वेंटी-ट्वेंटी थीम से खींचा गया है, जो कि वर्डप्रेस द्वारा दिया गया उदाहरण है।


भी, आशुलिपि, जबकि बयान ओ =
टॉम जम्मू नॉवेल

3
बंद करना बंद करना - इस सवाल का कोई निश्चित उत्तर नहीं है, और यह निश्चित रूप से WP विशिष्ट मुद्दा नहीं है - PHP के साथ काम करने वाला कोई भी व्यक्ति इस मुद्दे का सामना करेगा
au

3
@anu: सबसे पहले, एक प्रश्न में हमेशा एक एकल, निश्चित उत्तर नहीं हो सकता है (हालांकि यह अभी भी एक सर्वोत्तम उत्तर हो सकता है)। दिशानिर्देश कहते हैं, "व्यावहारिक और जवाबदेह"। दूसरा, हां, यह तकनीकी रूप से एक PHP मुद्दा है, लेकिन मैंने इसे बहुत कम देखा है, WP के साथ काम करने के अपने कम समय में। इसलिए, जब यह WP तक सीमित नहीं है, तो यह मुझे WP सेटिंग में पूछने के लिए पर्याप्त रूप से सहसंबद्ध लगता है।
स्वदेशी

जवाबों:


20

यह किसी भी वर्डप्रेस शैली गाइड में अनुशंसित नहीं है, और मुझे लगता है कि यह एक खराब कोडिंग शैली है। शुरुआती लोग इस शैली का उपयोग कर रहे हैं, हो सकता है क्योंकि यह HTML की तरह लगता है ...

दुर्भाग्य से, डिफ़ॉल्ट थीम अक्सर इस शैली का उपयोग कर रहे हैं, इसलिए कुछ शुरुआती सोच सकते हैं कि यह एक कोड शैली का हिस्सा है।

इस शैली का एक नुकसान टिप्पणी हैंडलिंग है। निम्नलिखित उदाहरण को करीब से देखें और यह वह नहीं करता है जो लेखक उम्मीद कर सकता है:

<?php echo 'Important: '; // announcement ?>
<?php echo ' enter the word '; /* start ?>
<?php echo '<b>password</b>'; /* the end */ ?>

सौभाग्य है कि डिबगिंग। :)

नियम: केवल PHP और HTML संदर्भ के बीच स्विच करें यदि आपको दोनों भाषाओं का आउटपुट बनाना है। अन्य सभी मामलों में नियमित रूप से लाइन ब्रेक का उपयोग करें।

अद्यतन, आगे के विचार: हर वैध HTML फ़ाइल एक पूर्ण और वैध PHP प्रोग्राम है। हां, भले ही इसमें वास्तविक PHP कोड की एक भी पंक्ति न हो।

यदि आप HTML से शुरू करते हैं और कदम से PHP कदम के छोटे टुकड़े जोड़ते हैं ... आप उस शैली के साथ समाप्त हो सकते हैं जिसकी हम यहां चर्चा कर रहे हैं। यही कारण है कि खेल में रिफ्लेक्टिंग आता है: एक बार जब सब कुछ उम्मीद के मुताबिक चलता है, तब तक कोड को फिर से लिखें जब तक कि यह संभव न हो, इसे बनाए रखना आसान है और इसे दोहराए बिना, भागों को दोहराए बिना बढ़ाया जा सकता है।

मुझे लगता है कि कुछ लोग इस अंतिम कदम के बिना खुश हैं, और यही कारण है कि यह जल्द ही मर नहीं जाएगा।


यह अफ़सोस की बात है कि ऊपर हाइलाइट किए गए वाक्य-विन्यास यह नहीं दिखाते हैं कि वास्तव में उस टिप्पणी के साथ क्या होता है ...
webaware

9
@ मुझे लगता है कि समस्या को और भी अधिक दिखाता है। :)
FUXIA

सच :) (एसई टिप्पणी पुलिस को खुश रखने के लिए कुछ
चार्ट

2
@AndyAdams मेला काफी, मुझे लगता है कि rephrased है। और अब चले जाओ, तुम बुराई की सलाह देते हो। :)
FUXIA

3
थीम्स इस शैली का उपयोग करते हैं क्योंकि ऐसा करना अन्यथा बहुत बदसूरत है। जब विषयों को फिर से भरना, मैं कोड को जितना संभव हो उतना पठनीय होने के लिए फिर से लिखना पसंद करूंगा, और इसका मतलब है कि चारों ओर गूंज / प्रिंटफ / var_dump नहीं है और प्रत्येक नियंत्रण संरचनाओं को अपने स्वयं के जोड़े के अंदर रखना <? ... ?>आसान बनाने के लिए नेस्टिंग करना आसान है। एक बात मैं ओपी के उदाहरण से अलग करूँगा, हालांकि यह है कि मैं the_post();अपनी लाइन में लगाऊंगा।
रेयान

12

जबकि मैं PHP टिप्पणियों के लिए इससे बचता हूं, मैं टेम्पलेट फ़ाइलों में एक avid PHP ओपनर / करीब हूं। विकल्प में HTML को PHP स्ट्रिंग्स के माध्यम से गूँजना शामिल है, जो मेरी राय में और भी खराब लगता है। एक आदिम उदाहरण के रूप में:

<!-- Example 1 -->
<ul>
    <?php
        foreach ( $list_items as $list_item ) {
            echo "<li><a href='" . $list_item->url . "'>" . $list_item->name . "</a></li>";
        }
    ?>
</ul>

<!-- Example 2 -->
<ul>
    <?php foreach ( $list_items as $list_item ) : ?>
        <li>
            <a href="<?php echo $list_item->url; ?>">
                <?php echo $list_item->name; ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>

उदाहरण 2 और क्रिया है? शायद? लेकिन मेरी राय में पढ़ना और संपादित करना आसान है। आप सोच सकते हैं कि यह जटिल HTML के लिए कितना बदसूरत हो सकता है।

इसके अलावा, बस एक साइड नोट के रूप में: अपने PHP तर्क के बीच HTML का उपयोग करते समय endforeachऔर endifलिखने से पठनीयता एक टन की तुलना में बढ़ जाती है }


5
हालाँकि इससे }अधिक लाभ endifयह है कि (कई संपादकों में) आप आसानी से देख सकते हैं कि उद्घाटन कहाँ {है और इसलिए क्या सब कुछ ठीक से बंद हो गया है। कि endifऔर हालत का एक पूरा गुच्छा के साथ बाहर की कोशिश करो ...

2
foreach ( $list_items as $list_item ) printf( '<li><a href="%1$s">%2$s</a></li>', $list_item->url, $list_item->name );- दो लाइनें, HTML और PHP अच्छी तरह से अलग हो गए। : पी
FUXIA

4
@toscho: आप बिंदु पूरी तरह से याद किया। आप अभी भी PHP और HTML का मिश्रण कर रहे हैं, जो लोग दूसरी शैली पसंद करते हैं वह यह करता है क्योंकि हम PHP स्ट्रिंग के अंदर HTML होने से बचना चाहते हैं। मैं PHP का उपयोग एक अस्थायी भाषा के रूप में करते समय दूसरी शैली का उपयोग करता हूं क्योंकि यह PHP और HTML के मिश्रण को समझदारी से घोंसला बनाने का एकमात्र तरीका है, जबकि मैं PHP का उपयोग स्क्रिप्टिंग भाषा के रूप में करते समय पूर्व का उपयोग करता हूं क्योंकि आमतौर पर HTML होने का कोई अच्छा कारण नहीं है स्क्रिप्ट में जब आप टेम्पलेट से एप्लिकेशन लॉजिक को अलग करते हैं। शॉर्ट टैग उपलब्ध होने पर दूसरी शैली और भी बेहतर होगी: <? ... ?>और <?= ... ?>
रेयान

1
@ चुप: यदि आपको ब्रेसिज़ के मिलान में परेशानी होती है, तो आपने शायद कभी इंडेंटेशन के बारे में नहीं सुना है? साथ ही, आपको endifकिसी भी सभ्य संपादकों के उद्घाटन को उजागर करने में सक्षम होना चाहिए ।
रेयान


10

यह पृष्ठ देखने के बीच पसंद के बारे में है:

  • पूरी तरह से PHP- जनरेट की गई इकाई के रूप में
  • HTML दस्तावेज़ टेम्पलेट के रूप में, PHP टेम्पलेट टैग द्वारा संचालित

अलग-अलग लोग इसके बारे में अलग तरह से सोचते हैं। ध्यान दें कि फ़ंक्शन शायद ही कभी इस शैली का उपयोग करते हैं, क्योंकि वे शुद्ध PHP के ब्लॉक की तरह अधिक महसूस करते हैं। दूसरी ओर, यह टेम्पलेट्स में असामान्य नहीं है क्योंकि वे फाइलों में अधिक फैले हुए हैं और शुद्ध एचटीएमएल की मात्रा आसानी से उनमें पीएचपी की तुलना में अधिक हो सकती है।

यदि आप टेम्प्लेटिंग इंजन (मूंछ, टहनी, आदि) को देखते हैं - वे इस शैली को बहुत पसंद करते हैं सिवाय इसके कि उनका सिंटैक्स सादे PHP की क्रियाशीलता को खत्म करने के लिए जाता है।

पुनश्च मैं टिप्पणी है कि मैं बात कर रहा हूँ करना चाहते हैं समझदार HTML में PHP के embedding, नहीं सचमुच पर टैग खोलने और न खत्म होने वाली हर बस की खातिर लाइन।


2

मेरा सवाल है: क्यों? इन सभी अतिरिक्त टैग को शामिल क्यों करें?

जवाब बहुत आसान है: श्रोता। जब लोग (प्रोग्रामर नहीं) एक थीम को पकड़ते हैं, तो अपने इंस्टा को एफ़टीपी करते हुए, 5min सेटअप को चलाना और इसी तरह पहले से ही उन्हें प्रोग्रामिंग करने का मन करता है। जब वे तब अपने विषय में जो कुछ भी चाहते हैं, उसकी एक-एक पंक्ति को जोड़ना या बदलना चाहते हैं , तो वे शायद पहले से ही पता लगा लेते हैं कि HTML क्या है। PHP अभी भी उनकी पहुंच से दूर होगी। तो मेरा अनुमान है कि इसके पीछे का विचार तत्वों को जोड़ने या आसानी से हटाने की अनुमति देना है, जब वे गलती करते हैं।

नोट: यह वह नहीं है जो मुझे पसंद है, पसंद करें या सिफारिश करें। यह सिर्फ मुझे लगता है कि ऐसा क्यों होता है।


0

मैंने पाया है कि कुछ नए प्रोग्रामर इस तरह से प्रशिक्षित हैं। मैं लिंडा पर 40 घंटे के पाठ्यक्रम का पालन कर रहा हूं और प्रशिक्षक फ़ंक्शन की परिभाषाओं के अपवाद के साथ हर लाइन पर PHP टैग छोड़ रहा है। यह संभवतः HTML और PHP के बीच की रेखाओं को स्पष्ट रूप से आकर्षित करता है, जो संभवतः नए लोगों को यह समझने में मदद करता है कि HTML कहां समाप्त होता है और PHP शुरू होता है। उसके बाद, शायद यह एक आदत है। मैं खुद इससे परेशान होने लगा था और यह देखने का फैसला किया कि क्या कोई और शिकायत कर रहा है।

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