Neden her satırda <? Php ve?> Var


24

Bu kongreyi hemen hemen her yerde gördüm ve zaman zaman beni delirtmeye yaklaşıyor:

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

Nerede <?phpve kapanış ?>hiçbir müdahalede HTML kodu olsa bile, her hattı üzerinde bulunmaktadır.

Sorum şu: Neden? Tüm bu ekstra etiketleri neden dahil ettin?

Bana göre, bu kural koduna ciddi miktarda dağınıklık ekliyor, ilk etapta takip etmek can sıkıcı görünüyor ve yanlışlıkla bir açılış veya kapanış etiketini bırakmak için daha birçok yerin eklendiğini de ekliyor.

NOT

Bu, WordPress tarafından verilen Yirmi Oniki temanın kodudur.


ayrıca, kısaltma yaparken ifadeler = o
Tom J Nowell

3
Kapatmak için işaretleme - bu soruya kesin bir cevap yok ve kesinlikle WP'ye özel bir konu değil - PHP ile çalışan herhangi bir kişi bu konu ile karşı karşıya kalacak
anu

3
@anu: İlk önce, bir soru her zaman tek ve kesin bir cevaba sahip olmayabilir (yine de en iyi cevabı bulabilir). Kılavuzlar "pratik ve cevaplanabilir" diyor. İkincisi, evet, bu teknik olarak bir PHP sorunudur, ancak kısa sürede WP ile çalışırken çok daha fazlasını gördüm. Bu yüzden, bu WP ile sınırlı olmasa da, bir WP ortamında sormaya yetecek kadar ilişkili gibi görünüyor.
Yerli köken

Yanıtlar:


20

Bu, herhangi bir WordPress stili kılavuzunda önerilmez ve bunun kötü bir kodlama stili olduğunu düşünüyorum. Yeni başlayanlar bu stili kullanıyor, belki de HTML gibi hissettirdiği için…

Ne yazık ki, varsayılan temalar bu stili çok sık kullanıyor, bu nedenle bazı yeni başlayanlar bunun bir kod stilinin parçası olduğunu düşünebilir.

Bu tarzın bir dezavantajı yorum kullanımıdır. Aşağıdaki örneğe ve yazarın bekleyebileceği şeyi nasıl yapmadığına yakından bakın:

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

Bu hata ayıklama iyi şanslar. :)

Kural: PHP ile HTML bağlamı arasında yalnızca iki dilde çıktı oluşturmak zorunda kaldığınızda geçiş yapın. Diğer tüm durumlarda düzenli satır sonları kullanın.

Güncelleme, başka düşünceler: Her geçerli HTML dosyası, eksiksiz ve geçerli bir PHP programıdır. Evet, tek bir satır gerçek PHP kodu içermese bile.

HTML'den başlayıp adım adım küçük PHP parçaları eklerseniz, burada tartıştığımız stille bitebilirsiniz. En That üstlenmeden oyuna gelir: Mümkün olduğunca okunabilir olana kadar her şey çalışır kez beklendiği gibi, bakımı kolay ve parçaları tekrar etmeden, uzatmak, kodu yeniden.

Sanırım bazı insanlar bu son adım olmadan mutlular ve bu yüzden yakında ölmeyecek.


Yukarıda belirtilen sözdiziminin, bu yorumda gerçekte ne olduğunu göstermemesi üzücü ...
webaware,

9
@webaware Bunun sorunu daha da iyi gösterdiğini düşünüyorum. :)
fuxia

Gerçek :) (artı SE yorum polisini mutlu etmek için bazı karakterler)
webaware

2
@AndiAdams Fuarı yeterince, bunu düzelttim. Ve şimdi git, seni kötülük danışmanı. :)
fuxia

3
Temalar bu stili kullanır çünkü aksi halde yapmak çok çirkindir. Temaları yeniden düzenlerken, kodu mümkün olduğunca okunaklı olacak şekilde yeniden yazmayı tercih ederim ve bu, etrafına echo / printf / var_dump yapmama ve her bir kontrol yapısını iç içe geçirmeyi <? ... ?>daha kolay hale getirmek için kendi çiftlerinin içine koymak anlamına gelir . OP'nin örneğinden farklı yaptığım bir şey the_post();, kendi çizgisini çizmem.
Lie Ryan

12

Ben PHP yorumlar için bunu önlemek iken, ben hevesli bir PHP açacağı / şablon dosyalarında daha yakın değilim. Alternatif, benim görüşüme göre daha da kötü görünen PHP dizeleri üzerinden HTML'nin yankılanmasını içerir. İlkel bir örnek olarak:

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

Örnek 2 daha ayrıntılı mı? Belki? Ama bence okumak ve düzenlemek daha kolay. Karmaşık HTML için ne kadar çirkin olabileceğini hayal edebilirsiniz.

Ayrıca, sadece bir yan not olarak: kullanarak endforeachve endifPHP mantık geliştirir okunabilirliği arasındaki HTML yazma bir ton ile karşılaştırıldığında }.


5
büyük avantajı }üzerinde endifancak açılış nerede (birçok editörler) kolayca görebilmesi olduğunu {ve her şeyin düzgün kapatılmış nedenle ister. Bunu endifve bir sürü koşullu

2
foreach ( $list_items as $list_item ) printf( '<li><a href="%1$s">%2$s</a></li>', $list_item->url, $list_item->name );- iki satır, HTML ve PHP güzelce ayrılmış. : P
fuxia

4
@toscho: Bu noktayı tamamen kaçırdın. Hala PHP ve HTML'yi karıştırıyorsunuz, ikinci tarzı tercih eden insanlar bunu yapıyor çünkü PHP dizesinde HTML olmasını engellemek istiyoruz. PHP'yi şablonlama dili olarak kullanırken ikinci stili kullanıyorum çünkü PHP ve HTML'yi mantıklı bir şekilde bir araya getirmenin tek yolu bu, PHP'yi komut dosyası dili olarak kullanırken birincisini kullanıyorum çünkü genellikle HTML'ye sahip olmak için iyi bir neden yok. Uygulama mantığını şablondan ayırdığınızda komut dosyasında. Kısa etiketler mevcutsa, ikinci stil daha da iyi olurdu: <? ... ?>ve <?= ... ?>.
Yalan Ryan

1
@Piet: Parantezle eşleşen sorunlarınız varsa, muhtemelen girinti duymadınız mı? Ayrıca, endifherhangi bir makul editörde açılışı vurgulamak için yapılandırabilmelisiniz .
Lie Ryan

4
@ LieRyan Güzel ol.
Rarst

10

Bu, sayfayı farklı görme arasında seçim yapmakla ilgilidir:

  • tamamen PHP tarafından üretilen varlık olarak
  • PHP şablon etiketleri tarafından desteklenmektedir, HTML belge şablonu

Farklı insanlar farklı düşünmeye meyillidir. İşlevlerin bu stili nadiren kullandıklarını, çünkü daha çok saf PHP bloğu gibi olduklarını unutmayın. Öte yandan, şablonlarda nadir değildir, çünkü dosyalar arasında daha fazla yayılmıştır ve saf HTML miktarı bunlarda PHP'den daha fazla olabilir.

Eğer şablon motorlarına bakarsanız (Bıyık, Dal, vb.) - sözdizimlerinin düz PHP'nin ayrıntılarını ortadan kaldırma eğiliminde olması dışında, bu stile çok benziyorlar.

Not : PHP'nin HTML'e mantıklı bir şekilde gömülmesinden bahsettiğimi , kelimenin tam anlamıyla sadece bunun için her satırda etiketleri açmayı ve bitirmeyi değil.


2

Sorum şu: Neden? Tüm bu ekstra etiketleri neden dahil ettin?

Cevap oldukça basit: İzleyici. İnsanlar (programcılar değil) bir tema kaptıklarında, kurulumlarını FTP'ye alarak, 5dk kurulumunu çalıştırma vb. Zaten kendilerine programlama gibi geliyor. Daha sonra ekleme veya tek bir satır değiştirmek istediğinizde her neyse onların tema, o zaman belki zaten HTML ne olduğunu buldum. PHP hala ulaşamayacağı kadar uzakta olacak. Bu yüzden benim tahminim, bunun ardındaki fikir, hata yaptıklarında her şeyi kırmadan, elemanların daha kolay eklenmesini veya çıkarılmasını sağlamaktır.

Not: Bu benim sevdiğim, tercih ettiğim veya önermediğim şey değil. Sadece bunun neden olduğunu düşünüyorum.


0

Bazı yeni programcıların bu şekilde eğitildiğini öğrendim. Lynda'da 40 saatlik bir kursu takip ediyorum ve eğitmen, fonksiyon tanımları hariç her satıra PHP etiketlerini bırakıyor. Muhtemelen, HTML ile PHP arasında net bir şekilde çizgiler çiziyor ve bu da yeni insanların HTML'nin nerede bittiğini ve PHP'nin nerede başladığını anlamalarına yardımcı oluyor. Ondan sonra, muhtemelen bir alışkanlık. Kendimden rahatsız olmaya başlamıştım ve başka birinin şikayet edip etmediğini görmeye karar verdim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.