2009-11-19 13 views
6

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

मैं पूरा करने के लिए है कि आप नीचे होता सोचा होगा वास्तव में सशर्त रूप प्रतिध्वनित करने के लिए एक गूंज बयान का इस्तेमाल किया था।

<html> 
<head></head> 
<body> 

<?php 
/* if the "submit" variable does not exist, the form has not been submitted - display initial page */ 
if (!isset($_POST['submit'])) { 
?> 

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    Enter your age: <input name="age" size="2"> 
    <input type="submit" name="submit" value="Go"> 
    </form> 

<?php 
    } 
else { 
/* if the "submit" variable exists, the form has been submitted - look for and process form data */ 
    // display result 
    $age = $_POST['age']; 
    if ($age >= 21) { 
     echo 'Come on in, we have alcohol and music awaiting you!'; 
     } 
    else { 
     echo 'You're too young for this club, come back when you're a little older'; 
    } 
} 
?> 

</body> 
</html> 

उत्तर

4

PHP manual बहुत शालीनता से यह बताते हैं:

... जब पीएचपी ?> समापन टैग मारता है, यह बस outputting जो कुछ भी यह पाता है शुरू होता है (सिवाय एक के तुरंत बाद नई पंक्ति के लिए - अनुदेश जुदाई देखें) जब तक यह हिट एक और खुलने वाला टैग ... लेकिन टेक्स्ट का उपयोग न outputting, पीएचपी पार्स मोड से बाहर छोड़ने के लिए आम तौर पर ... echo() या print() के माध्यम से पाठ के सभी भेजने की तुलना में अधिक कुशल है

3

php टैग के बाहर भागों शाब्दिक है कि कार्यक्रम के प्रवाह के उस हिस्से में outputted हैं माना जाता है।

2

सशर्त विफल रहता है, यह php ब्लॉक के भीतर अंत घुंघराले-ब्रेसिज़ के लिए छोड़ देता है। बाकी सब कुछ एक शाब्दिक माना जाता है जो सीधे पृष्ठ पर जाता है (जैसा कोड माना जाता है)।

0

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

स्रोत: रिवर्स में इसके बारे में http://phpstarter.net/2009/01/omit-the-php-closing-tag/

3

Think। पूरा दस्तावेज PHP है, एक अंतर्निहित के साथ? > शुरू में और एक अंतर्निहित <? बिल्कुल अंत में। फिर आप इन equivalencies मिलती है:

?>HTML TAGS<? 

/

echo 'HTML TAGS'; 

दूसरे शब्दों में, पीएचपी उद्घाटन के प्रत्येक उल्टे जोड़ी के बराबर हो जाता है ब्रेसिज़ बंद करने एक गूंज बयान समाहित।

+1

वास्तव में किसी के सिर में जाने के लिए यह एक बुरी समझ है। अधिक जैसे - PHP टैग के बाहर डेटा का मूल्यांकन नहीं किया जाता है, लेकिन अभी भी सभी नियंत्रण प्रवाह विवरणों का हिस्सा है। –

+1

शायद एम स्क्रिप्ट लेखक परिप्रेक्ष्य के लिए। 10 साल पहले मैंने एक PHP- जैसे प्रोग्रामिंग वातावरण बनाया, और यह बिल्कुल ठीक है कि संकलक/दुभाषिया कैसे कार्यान्वित किया जाता है। एक कंपाइलर-लेखक परिप्रेक्ष्य से यह चीजें कैसे काम करती है इसकी एक बहुत अच्छी समझ है। डेटा का मूल्यांकन केवल विशेष परिस्थितियों में किया जाता है, जैसे डबल कोट्स। आम तौर पर विशेष परिस्थितियों में डेटा का मूल्यांकन करने के बारे में सोचना वाकई बुरा होता है। – Killroy

0

+1 बर्नार्ड जवाब।

आप इस नज़र कम अजीब/अच्छी तरह से गठित टैग की तरह अपने templating स्तरीय नियंत्रण संरचनाओं का उपयोग कर, जैसे .:

<?php if (!isset($_POST['submit'])) { ?> 
    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>"> 
     <label for="age">Enter your age:</label> 
     <input name="age" id="age"> 
     <input type="submit" name="submit" value="Go"> 
    </form> 
<?php } else { ?> 
    <?php 
     // Read submitted age 
     // 
     $age= intval($_POST['age']); 
    ?> 
    <?php if ($age >= 21) { ?> 
     Come on in, we have alcohol and music awaiting you! 
    <?php } else { ?> 
     You're too young for this club, come back when you're a little older. 
    <?php } ?> 
<?php } ?> 

नोट htmlspecialchars$_SERVER['PHP_SELF']; चारों ओर से टूट कर सकते हैं - यह एक क्रॉस साइट था उदाहरण कोड में लिखित छेद। इसके अलावा पिछले echo में apostrophes के साथ एक स्पष्ट समस्या थी।

+0

व्यक्तिगत रूप से मुझे लगता है कि कोड छोटे टैग सक्षम के साथ और अधिक पठनीय हो जाता है। यह इस वाक्य रचनात्मक शॉर्ट कट को भी सक्षम बनाता है: <इनपुट मूल्य = ""> – Killroy

+0

हाँ, केवल वह छोटा-सा महत्वपूर्ण महत्वपूर्ण 'htmlspecialchars' को छोड़ देता है, इसलिए यह अंत में छोटा नहीं है। मैं मानता हूं कि छोटे टैग अधिक पठनीय हैं लेकिन ऐसा लगता है कि वे इस पर ध्यान दिए बिना रास्ते पर हैं। एक्सएमएल प्रोसेसिंग निर्देशों में PHP को ले जाने का विचार एक अच्छा था, लेकिन दुर्भाग्यवश, क्योंकि वे विशेषता मान इंजेक्ट करने का कोई तरीका नहीं देते हैं, फिर भी आप PHP को नहीं लिख सकते हैं जो कि अच्छी तरह से गठित एक्सएमएल भी है। तो अंत में 'लंबी टैग' पीआई में परिवर्तन काफी व्यर्थ हो गया है। – bobince