Sorunuzu doğrudan cevaplamak için: Asla statik metin veya HTML yazmayın. Bunu PHP'nizin dışında bırakın.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
Yapmanız gereken tek şey statik metin veya statik html'den geçmekse, PHP'ye kaçmak bir israftır. İçindeki tüm kodlar <?php ?>
yorumlanmak üzere PHP'ye gönderilir. Bu, web sitenizin daha yavaş olduğu ve PHP'ye sebepsiz yere çok miktarda statik metin ilettiğinizde elektrik harcadığınız anlamına gelir. (Bazen bir sebep vardır.)
En iyi uygulama, mantığınızın ve homurdanızın HTML içermeyen dosyalarda çalışmasını sağlamaktır, sadece PHP.
Bunu yapmayı sevdiğim yol bir MVC çerçevesi ile. Modeller ve denetleyicilerde saf PHP, görünümlerde ise HTML ve PHP karışımı var. Bir MVC çerçevesine ihtiyacınız yok; HTML karışımınızı şablon dosyalarına yapıştırabilir, daha sonra saf PHP dosyalarınızı eklersiniz.
Değişkenlerinizi (bunlara HTML içermeyen) salt PHP dosyalarında oluşturduktan sonra, HTML'nizle bunları dosyaya aktarabilirsiniz. Orada ve sadece orada, HTML ve PHP'yi karıştırmak iyi. Ancak, bu önemlidir ve HTML içeren dosyalarla çalışırken PHP'yi minimumda tutun.
Neyse ki, PHP, html ile karıştırıldığında PHP'nin okunmasını kolaylaştıran kolay araçlarla birlikte gelir.
Alternatif Sözdizimi
En iyi uygulama, saf PHP yazarken düzenli PHP sözdizimini kullanmak, fakat PHP ve HTML'yi karıştırırken alternatif sözdizimini kullanmaktır.
HTML'siz düzenli PHP dosyalarında:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Bu, saf PHP için güzeldir, ancak HTML'den kaçarken ideal değildir. Özellikle, kapanış ayraçları genellikle büyük HTML yığınlarında göründüklerinde anlaşılması güçtür.
Sorunuza dayanarak, HTML ve PHP'yi karıştıran bir dosyada yazmış olacağınız anlaşılıyor:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
Yukarıda açıklanan nedenlerden dolayı, HTML’nin PHP’ye gönderilmemesini istiyoruz. Bunu böyle yaparız:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
HTML kodumuzu PHP etiketlerimizden aldık, bu bir gelişmedir. Ama daha ileri gidebiliriz.
Kapama ayracının ne kadar verimsiz olduğuna dikkat edin. Bir döngü mü yoksa bir if ifadesi mi kapattığını bilmiyoruz. Bu, yukarıdaki örnekte önemsiz görünmektedir, ancak genellikle bir döngü / endloop içindeki if / endif'in içinde düzinelerce HTML satırı vardır.
En iyi uygulama, PHP ve HTML'yi karıştıran bir dosyada, ayraçları ( { }
) açıp kapatmayı ihmal eden alternatif sözdizimini kullanmaktır :
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
Yeni sözdiziminin anlambiliminin dışında ( :
ve endif;
yerine {
ve }
) iki şeyi fark etmelisiniz:
- Yine, HTML ve metin, PHP tarafından kontrol edilirken,
<?php ?>
etiketlerin dışındadır , dolayısıyla yorumlanmaz. Yukarıda açıklanan nedenlerden dolayı, bu iyidir.
- Bu, tüm bunların php olmasının, rastgele kapanış parantezleri (
<?php } ?>
) açtıkları yeri bulmakta zor olan şeyleri kapatmaları (çünkü, dağınık görünümlü bir HTML demetiyle karıştırılmaları) dahil olmaktan çok daha bilgilendiricidir . Yine, döngüler ve if ifadeleri ile büyük bir HTML dosyası hayal edin. Neyi kapattığınızı belirtmek çok netleşebilir.
Aynı şablon dostu sözdizimi döngüler için de kullanılabilir:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Kısa Etiketler
PHP tarafından sağlanan bir başka harika araç, yine de sadece PHP ve HTML'yi karıştırırken kullanmak istediğiniz kısa etiketlerdir. Kısa etiketleri php.ini dosyasında açmanız gerekebilir. Açıldıktan sonra kısa etiketler her şeyi daha okunaklı hale getirir.
Kısa etiketler olmadan yazmanız gerekir, <?php echo $something; ?>
ancak kısa etiketler ile yazabilirsiniz <?=$something?>
ve aynı sonucu verecektir.
Kısa etiketleri ve alternatif PHP sözdizimini birleştirirken, PHP öğelerini içeren bazı zarif HTML dosyalarını yazabilirsiniz. Son döngü örneğimizi alarak (sadece döngü içindeki kısım), kısa etiketler azaltmamızı sağlar:
<li><?php echo $thing; ?></li>
için
<li><?=$thing?></li>
bu çok daha okunaklı.
Daha ileri gidebilir miyiz? Evet. Çeşitli şablonlama sistemlerini kullanarak aşağıdakileri yapabilirsiniz:
<li>{thing}</li>
Hangi inanılmaz okunabilir. Bununla birlikte, şablonlama sistemleri, asıl sorunun kapsamı dışındadır (yine de bir süre önce bıraktım).