कौन सा बेहतर है: HTML को PHP कोड के अंदर या उसके बाहर शामिल करने के लिए?


28

इसे देखो:

<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>

और अब इसे देखें:

<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>

उपरोक्त उदाहरणों में से कौन सा बेहतर माना जाता है (कम से कम प्रदर्शन के दृष्टिकोण से)?

मुझे पता है कि उदाहरण तुच्छ हैं, लेकिन मैं शुरू से ही अच्छी अभ्यास की आदतों का पालन करना चाहता हूं, इसलिए जब मेरे पास अधिक से अधिक लाइनें होंगी तो वे प्रदर्शन को प्रभावित नहीं करेंगे या जो कुछ भी नकारात्मक तरीके से होगा।


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

1
@delnan - आपको पोस्टिंग पर विचार करना चाहिए कि एक उत्तर के रूप में, थोड़ा विस्तारित रूप में। यह एक बहुत क्लीनर है।
jmort253

@ jmort253 ने इस पर विचार किया है, लेकिन मेरे पास बहुत कम PHP ज्ञान है, इसलिए मैं PHP दुनिया में सर्वोत्तम प्रथाओं के लिए बात नहीं कर सकता।

आप कौनसी समस्याएं हल करने की कोशिश कर रहे हैं?
जिम जी।

प्रदर्शन के मामले में इससे कोई फर्क नहीं पड़ता। तुलना में नेटवर्क इतना धीमा है। हस्तांतरण की लागत काफी अधिक है, जिससे पीढ़ी की लागत तुलनात्मक रूप से कम हो जाती है।
मार्टिन यॉर्क

जवाबों:


23

जैसा कि टिप्पणी बताती है, इसे टेम्प्लेट द्वारा किया जाना चाहिए। लेकिन अगर केवल आपकी दो पसंद संभव है। केस 1 बेहतर होगा। यह उसी तरह की अवधारणा है जैसे कि एंड्रॉइड एक्सएमएल द्वारा लेआउट फुलाया जाता है, या प्रोग्रामेटिक रूप से यूआई बना रहा है। आपका <br/>html से एक स्थिर सामग्री है और आपका सारा सर्वर इसे दिखाने के लिए करेगा। लेकिन अगर आप इसे निष्पादित करने के लिए php का उपयोग करते हैं, तो यह आपके सर्वर संसाधनों का उपयोग कर रहा होगा और कंप्यूटिंग हो जाएगा।

यह है कि यह कैसे किया जाना चाहिए: index.php:

<?php
include 'header.html';
...
include 'footer.html';  
?>  

header.html और footer.html टेम्प्लेट हैं।


1
मैंने केविन यंक के लिए एक पुस्तक पढ़ी है जो कि "PHP & MySQL Novice to Ninja" है, जिसे कंटोलर्स और टेम्प्लेट्स नामक कुछ के बारे में बताया गया है। क्या ये वही बातें हैं जिनके बारे में आप मुझे बता रहे थे या वे अलग हैं? यदि वे समान हैं तो विभिन्न फ़ाइलों में कोड डालने से यह बेहतर प्रदर्शन कैसे करेगा?
rashed

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

उसके पीछे मुख्य कारण क्या है? क्या होगा अगर हम इसे इस तरह से नहीं करते हैं? हम क्या खो देंगे?
rashed

इसे देखते हैं। यह इस उत्तर पोस्ट की 4 वीं टिप्पणी है। यदि आप इस पृष्ठ को अब स्रोत पर देखते हैं, तो आपको "<div> <span ...> ... </ span> <a ...> ... </a>" 4000 हाथ की टिप्पणी कोडिंग करते हुए दिखाई देगा। क्या यह संभव है? या बस इसे टेम्पलेट के रूप में बनाएं और अपने सर्वर को इसकी आवश्यकता होने पर 'जोड़ें'।
wtsang02

1
इसके अलावा @wtsang, आपके पास कभी भी उन दो विकल्प नहीं होते हैं, आपके पास हमेशा एक तीसरा, रन (या सीखना) होता है
ocodo

54

सीधे अपने प्रश्न का उत्तर देने के लिए: स्थिर टेक्स्ट या HTML को कभी भी इको न करें । अपने PHP के बाहर छोड़ दें।

<?php echo "<p>Hello World</p>"; // Alway wrong. ?>

<p>Hello World</p>  <!-- Does the same thing, faster, and is more readable. -->

PHP से बचना एक बर्बादी है अगर आप जो करने जा रहे हैं वह सभी स्थैतिक पाठ या स्थिर html में पास होता है। अंदर के सभी कोड की <?php ?>व्याख्या करने के लिए PHP में भेजा जाता है। इसका मतलब है कि आपकी वेबसाइट धीमी है और अगर आप बिना किसी कारण के PHP में बड़ी मात्रा में स्थैतिक पाठ पारित कर रहे हैं तो आप बिजली बर्बाद कर रहे हैं। (कभी-कभी कोई कारण होता है।)

सबसे अच्छा अभ्यास यह है कि बिना किसी एचटीएमएल, केवल PHP के फाइलों में अपने तर्क और ग्रन्ट कार्य हों।

जिस तरह से मैं ऐसा करना चाहता हूं वह एमवीसी ढांचे के साथ है। मेरे पास मॉडल और नियंत्रकों में शुद्ध PHP और विचारों में HTML और PHP का मिश्रण है। आपको MVC फ्रेमवर्क की आवश्यकता नहीं है; आप बस HTML के अपने मिश्रण को टेम्पलेट फ़ाइलों में चिपका सकते हैं, जिसे आप अपनी शुद्ध PHP फ़ाइलों में शामिल करते हैं।

एक बार जब आपके पास आपके चर (जो उनमें HTML शामिल नहीं होते हैं) शुद्ध PHP फ़ाइलों में बनाए जाते हैं, तो आप उन्हें अपने HTML के साथ फ़ाइल से पास कर सकते हैं। वहाँ, और केवल वहाँ, यह HTML और PHP मिश्रण करने के लिए ठीक है। लेकिन, और यह एक महत्वपूर्ण लेकिन, जब HTML वाली फ़ाइलों के साथ काम करते हैं, तो PHP को कम से कम रखें।

सौभाग्य से, PHP html के साथ मिश्रित होने पर PHP को पढ़ने के लिए आसान बनाने के लिए अनुकूल उपकरण के साथ आता है।

वैकल्पिक सिंटैक्स

शुद्ध PHP लिखते समय नियमित PHP सिंटैक्स का उपयोग करना सबसे अच्छा अभ्यास है, लेकिन PHP और HTML को मिलाते समय वैकल्पिक सिंटैक्स।

बिना HTML के नियमित PHP फाइलों में:

if ($something) {
  do_something(); // do_something() shouldn't echo or print.
}

यह शुद्ध PHP के लिए सुंदर है, लेकिन HTML से बचते समय आदर्श नहीं है। विशेष रूप से, समापन ब्रेसिज़ अक्सर समझना मुश्किल होता है जब वे HTML के बड़े ढेर में दिखाते हैं।

ऐसा लगता है, आपके प्रश्न के आधार पर, जो आपने HTML और PHP को मिलाकर एक फ़ाइल में लिखा होगा:

<?php
  if ($something) {
    echo '<p>Hello World.</p>';
  }
?>

ऊपर वर्णित कारणों के लिए, हम चाहते हैं कि HTML को PHP में न भेजा जाए। हम ऐसा करते हैं:

<?php if ($something) { ?>
  <p>Hello World.</p>
<?php } ?>

हमें हमारा HTML हमारे PHP टैग्स से मिल गया, जो एक सुधार है। लेकिन हम और आगे जा सकते थे।

ध्यान दें कि बंद करने वाला ब्रेसिन कितना असंगत है? हमें नहीं पता कि यह एक लूप बंद कर रहा है या यदि एक बयान। यह उपर्युक्त उदाहरण में मामूली लगता है, लेकिन अगर लूप / एंडोस्कोप के अंदर / एंडिफ़ के अंदर एचटीएमएल की दर्जनों लाइनें हैं।

सबसे अच्छा अभ्यास यह है कि PHP और HTML को मिलाने वाली फ़ाइल में, आप वैकल्पिक सिंटैक्स का उपयोग करते हैं, जो ब्रेसिज़ खोलने और बंद करने में चूक करता है { }:

<?php if ($something): ?>
  <p>Hello world.</p>
<?php endif; ?>

एक तरफ नई वाक्य रचना के शब्दों से ( :और endif;के बजाय {और }), तो आपको दो चीजों पर ध्यान देना चाहिए:

  1. फिर से, HTML और पाठ, जबकि PHP द्वारा नियंत्रित किया जाता है, <?php ?>टैग से बाहर है , इसलिए इसकी व्याख्या नहीं की जाती है। ऊपर वर्णित कारणों के लिए, यह अच्छा है।
  2. यह बहुत अधिक जानकारीपूर्ण है अगर यह सभी यादृच्छिक बंद ब्रेसेस ( <?php } ?>) बंद करने वाली चीजों सहित php थे जो कि वे जहां खोले गए हैं, उन्हें ढूंढना मुश्किल है (क्योंकि वे HTML की गड़बड़ी के साथ मिश्रित हैं)। फिर, छोरों के साथ और यदि कथन में एक बड़ी HTML फ़ाइल की कल्पना करें। यह निर्दिष्ट करना कि आप क्या बंद कर रहे हैं, बहुत कुछ स्पष्ट कर सकता है।

समान टेम्प्लेट फ्रेंडली सिंटैक्स का उपयोग लूप के लिए भी किया जा सकता है:

<?php foreach ($things as $thing): ?>
  <li><?php echo $thing; ?></li>
<?php endforeach; ?>

संक्षिप्त टैग

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

छोटे टैग के बिना, आपको लिखना होगा <?php echo $something; ?>लेकिन छोटे टैग के साथ आप लिख सकते हैं <?=$something?>और इसका सटीक परिणाम भी होगा।

लघु टैग और वैकल्पिक PHP सिंटैक्स को मिलाते हुए, आप वास्तव में कुछ सुरुचिपूर्ण HTML फ़ाइलें लिख सकते हैं, जिसमें PHP तत्व शामिल हैं। हमारे पिछले लूप उदाहरण (लूप के अंदर का हिस्सा) को लेते हुए, लघु टैग हमें कम करने की अनुमति देते हैं:

<li><?php echo $thing; ?></li>

सेवा मेरे

<li><?=$thing?></li>

जो बहुत अधिक पठनीय है।

क्या हम और आगे जा सकते थे? हाँ। विभिन्न टेम्प्लेटिंग सिस्टम का उपयोग करके आप निम्न कार्य कर सकते हैं:

<li>{thing}</li>

जो आश्चर्यजनक रूप से पठनीय है। हालांकि, अस्थायी प्रणाली, मूल प्रश्न के दायरे से बाहर हैं (जो मैंने वैसे भी थोड़ी देर पहले छोड़ दिया था)।


4
+1 सबके लिए अच्छी सलाह है। वैकल्पिक नियंत्रण वाक्यविन्यास और संक्षिप्त टैग प्रस्तुति से तर्क के अलग होने और अलग होने के लिए बहुत महत्वपूर्ण हैं।
विल मेल्डन

1
संक्षिप्त टैग सावधानी के साथ उपयोग किया जाना चाहिए। यदि आप कोड का निर्माण कर रहे हैं जिसका पुन: उपयोग किया जाएगा, तो आप यह गारंटी नहीं दे सकते कि short_open_tagनिर्देश हमेशा चालू रहेगा। PHP 5.4 अक्षम <?=$thing?>होने पर भी हर समय उपलब्ध short_open_tagहै। इसके अलावा, short_open_tagXML के साथ संघर्ष को रोकने के लिए डिफ़ॉल्ट रूप से बंद किया गया है।
क्रिस

3
अलग-अलग विकल्पों को दिखाने के लिए +1, सर्वश्रेष्ठ उत्तर के लिए प्रगति करना।
तोला ओडजायि

1
शायद यह सच हुआ करता था, लेकिन मैंने अभी PHP7 में opcodes (यानी जो वास्तव में इंजन द्वारा चलाया जाता है) की जाँच की थी, और PHP / HTML को मिलाकर निश्चित रूप से स्थिर पाठ से बचने से "बिजली नहीं बचाती" है। <?php $foo='ABC'; echo '<div>', $foo, '</div>'और <?php $foo='ABC'; ?><div><?=$foo?></div>ठीक उसी opcodes में परिणाम, वे समान हैं।
जोशी Qaribou से

टेम्प्लेटिंग सिस्टम के बारे में नोट पर, सबसे सरल टेम्प्लेटिंग दृष्टिकोण जो आपके उदाहरण के लिए अनुमति देगा, एक सरल हेरेडोक है। Heredoc आपको <li>{$thing}</li>डबल-कोट्स पर लाभ के साथ, जैसा कि आपने दिखाया है, आपको यह बताने देता है कि आपको इसके अंदर डबल-कोट्स से बचना नहीं है। आप heredoc असाइन कर सकते हैं या इसे फ़ंक्शन में पास कर सकते हैं, इसलिए यदि आप इसे ब्लॉक में उपयोग कर रहे हैं, तो यह बहुत अधिक क्लीनर / php / html है, जैसे। array_reduce($items, function($s, $item) { $name = htmlspecialchars($item['name']); return $s . <<< EOT <li>{$name}: {$item['price']}</li> EOT; })
जोशी Qaribou से

4

आप सीख रहे हैं, PHP पृष्ठों में प्रदर्शन के बारे में भूल जाओ। इसके बजाय, वह तरीका चुनें जो पढ़ने में आसान हो

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

यदि आप वास्तव में पीछे के दृश्यों के लिए उत्सुक हैं, तो मुझे यह समझाने में मदद मिलेगी कि PHP पृष्ठ में स्थिर सामग्री के साथ क्या होता है। पहली चीजों में से एक पूरे पृष्ठ को निष्पादन योग्य कोड में "पार्स" करना है (जैसे आप <?php ?>टैग के बीच देखते हैं )। इसका एक हिस्सा किसी भी स्थिर पाठ को एक में बदलना है echo

तो यह:

<?php echo "Hello World"; ?>
<br />
<?php echo "Welcome"; ?>

कुछ इस तरह से रूपांतरित होता है:

echo "Hello World";
echo "<br />";
echo "Welcome";

पार्सिंग से जुड़ी बहुत कम लागत है, लेकिन परिणामी कोड को निष्पादित करने में कोई अंतर नहीं है। यदि आप एक PHP त्वरक का उपयोग कर रहे हैं तो पार्सिंग केवल एक बार किया जाता है और फिर कैश किया जाता है, इसलिए आपको पहले पृष्ठ लोड के बाद कोई प्रदर्शन अंतर नहीं दिखेगा।

याद रखें: पढ़ने में आसान!


1
मैं असहमत हूं। यह केवल प्रदर्शन के बारे में नहीं है, यह वास्तव में सीखने के बारे में है। गलत अभ्यास सीखना अच्छी सलाह नहीं है।
इसहाक

यह सच नहीं है कि "स्थिर पाठ" को एक में बदल दिया जाता है echo, यदि आपका मतलब है कि शाब्दिक रूप से (जो आपकी भाषा का अर्थ है)। परिणाम समान है, लेकिन तरीके बहुत अलग हैं। जिसे आप "स्टैटिक टेक्स्ट" कहते हैं वह वास्तव में PHP से HTML में भागने से है। जब ऐसा होता है, तो सर्वर कच्चा पाठ भेजना शुरू कर देता है। यह PHP के माध्यम से इसे पार्स नहीं करता है, जैसा कि यह करेगा echo। प्रदर्शन के निहितार्थ किसी भी गैर-अंतर्विरोधी परिस्थिति में शायद छोटे हैं, लेकिन यंत्रवत अंतर महत्वपूर्ण है।
अंडरस्कोर_ड

0

PHP की सबसे अच्छी विशेषताओं में से एक यह था कि इसे HTML में एम्बेड किया गया है। यह आमतौर पर टेम्प्लेट बनाने में उपयोग किया जाता है। यह आपके कोड को पढ़ना और बनाए रखना आसान बनाता है, क्योंकि यह HTML से PHP कोड को अलग करता है।

लेकिन अगर आपका एकमात्र स्थैतिक पृष्ठ "हैलो वर्ल्ड!" यह एक बुरा विचार है।


0

आपके प्रश्न का सरलता से उत्तर देने के लिए: अपना उदाहरण कोड दिया गया है, अगर किसी भी तरह के इत्र में कोई अंतर नहीं है। PHP सर्वर / होस्ट स्तर पर संसाधित हो जाती है, जबकि HTML उपयोगकर्ता एजेंट / व्यक्ति द्वारा संसाधित किया जाता है जो आपके ब्राउज़र पर आपके वेबपेज को देखता है। कौन तेज होगा? निर्धारित करना मुश्किल है।

मैं दूसरों से यह कहते हुए सहमत हूं कि प्रत्येक की अपनी ताकत और कमजोरियां हैं और वास्तव में साथ मिलकर काम कर सकते हैं। PHP प्रोग्राम करने योग्य है और चर के साथ गणना और काम कर सकती है। इस कारण से मेरे सभी पृष्ठ PHP हो रहे हैं और HTML कोड के स्निपेट पर कॉल करते हैं - जैसा कि उल्लेख किया गया था और वैरिएबल सम्मिलित करता है ताकि मेरा HTML गतिशील हो जाए।

अपने उदाहरण में आप HTML को एक जैसे PHP बयान में एक साथ स्ट्रिंग कर सकते हैं:

    <?php echo "Hello World<br>Welcome"; ?>

आशा है कि थोड़ा स्पष्ट करने में मदद करता है।


0

PHP के भीतर HTML का उपयोग करने की सीमाएँ हैं।

अधिकांश समय आपका HTML बाहर ही रहेगा। आप वैसे ही एक पेज बनाएंगे जैसे आप PHP का उपयोग नहीं कर रहे थे, तो PHP को दस्तावेज़ के उन क्षेत्रों में जोड़ें जहाँ आपको इसकी आवश्यकता है। आप एक दस्तावेज़ के भीतर PHP के कई हिस्सा हो सकता है।

PHP के अंदर काम करना HTML के कुछ उदाहरण हैं:

https://www.thoughtco.com/php-with-html-2693952


-1

यह आमतौर पर PHP से HTML कोड के उत्पादन के लिए बुरा रूप माना जाता है। इसके कई कारण हैं, लेकिन मुख्य यह है कि HTML और PHP कोड अलग होने पर कोड बनाए रखने के लिए, विशेष रूप से लंबे समय में यह आसान है।

यह HTML, CSS और जावास्क्रिप्ट की तरह है; इसे अलग रखना बहुत आसान और अधिक व्यावहारिक है।

तकनीकी रूप से, हालांकि, यह पूरी तरह से कोई फर्क नहीं पड़ता कि आप सामान कैसे बनाते हैं । PHP के लिए यह एक पंक्ति में सिर्फ बाइट्स है।


6
इससे फर्क पड़ता है। <?php echo 'hello'; ?>PHP में पास हो जाता है। helloPHP में पास नहीं होता है। कुछ भी जो PHP में पास हो जाता है, उसकी व्याख्या करके बाइटकोड में बदल जाता है। यह समय, प्रसंस्करण शक्ति और बिजली लेता है।
टेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.