PHP Koşullu Kapanış Tag Ardından

6 Cevap

Ben tür karıştı how aşağıdaki kod çalışır üzereyim. Kafamda bir bütün olarak yürütülen ve HTML işlenen her php bloğu hayal ediyorum. İlk blok asılı payanda ile tür eksik olduğunu Aslında ben çalışmak için PHP nasıl hayal ile güzel oynamıyor. Bir PHP kapanış etiketi aldığında PHP modül ne yapar? Nasıl PHP etiketleri içinde bu kodu yani sadece şartlı formu çıktısı, PHP etiketleri dışında düz metin çıktı etkisi olabilir mi?

Ben aslında şartlı formu yankı bir echo deyimi kullanmak zorunda olurdu altında gerçekleştirmek için olduğunu sanırdım.

<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>

6 Cevap

PHP manual hoş terbiyeli açıklıyor:

PHP ?> kapanış etiketleri çarptığında ..., basitçe (bir sonraki satırsonu karakteri hariç - bkz, deyim ayırma) ne bulsa çıktılayacaktır başka bir açılış etiketi vurur kadar ... ama büyük bloklar çıkış için Metnin, PHP ayrıştırma modu dışında bırakarak genel echo() veya print() ile metnin tümünü ücretinden daha verimli ...

Php etiketleri dışında parçaları program akışı bu bölümünde çıkarılmaktadır değişmezler olarak kabul edilir.

Tersten düşünün. Bütün belge örtülü olan, PHP?> başlangıç ​​ve örtük bir de

?>HTML TAGS<?

eşdeğer olur

echo 'HTML TAGS';

Diğer bir deyişle, PHP açılış / kapanış parantez her ters çifti bir echo deyimi saklar.

Koşullu başarısız olursa, php blok içinde uç kıvırcık parantez atlar. Her şey (kod kabul ediliyor aksine) bu sayfada düz gider değişmez olarak kabul edilir.

PHP geliştiricileri sık sık çıktı tarayıcıya gönderildikten sonra başlıkları ve çerezleri gönderme ile sorunla karşılaşırsanız, ama bu sorun da kasıtsız çıkışı ile olabilir. Boşluk bir PHP kod bloğunun bitiminden sonra takılı alırsa o PHP komut dosyası dahil edildiğinde, bu kasıtsız çıktı üretebilir.

Source: http://phpstarter.net/2009/01/omit-the-php-closing-tag/

1 Bernard'ın cevap.

Sen iyi oluşturulmuş etiketleri, örneğin gibi çiftleşmiş-seviye kontrol yapıları ile kırık / Bu görünüm daha az garip yapabilirsiniz.:

<?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 } ?>

Not htmlspecialchars etrafında $_SERVER['PHP_SELF']; - Bu örnek kodda bir çapraz site betik delik oldu. Artı son echo olarak kesme ile belirgin bir sorun vardı.