Acik projenin php sözdizimi

8 Cevap php

(Wordpress, drupal, joomla gibi) açık kaynak projesiyle çalışırken ben her zaman bir sözdizimi (bu drupal bir örnektir) gibi php sayfalarında bulabilirsiniz:

<?php if ($linked_site_logo or $linked_site_name): ?>
  <?php if ($title): ?>
    <div class="logo-site-name"><strong>
      <?php if ($linked_site_logo): ?><span id="logo"><?php print $linked_site_logo; ?></span><?php endif; ?>
      <?php if ($linked_site_name): ?><span id="site-name"><?php print $linked_site_name; ?></span><?php endif; ?>
    </strong></div>           
  <?php else: /* Use h1 when the content title is empty */ ?>     
    <h1 class="logo-site-name">
      <?php if ($linked_site_logo): ?><span id="logo"><?php print $linked_site_logo; ?></span><?php endif; ?>
      <?php if ($linked_site_name): ?><span id="site-name"><?php print $linked_site_name; ?></span><?php endif; ?>
   </h1>
  <?php endif; ?>
<?php endif; ?>

benim komut dosyası yazma, farklı bir sözdizimi kullanın yaparken; i önceki örneği yazdı ki eğer böyle bir şey olmazdı:

<?php
if($linked_site_logo or $linked_site_name){
    if($title){
        echo '<div class="logo-site-name"><strong>';
        if($linked_site_logo){ echo '<span id="logo">' . $linked_site_logo . '</span>'; }
        if($linked_site_name){ echo '<span id="site-name">' . $linked_site_name . '</span>'; }
        echo '</strong></div>';
    }else{ /* Use h1 when the content title is empty */
        echo '<h1 class="logo-site-name">';
        if($linked_site_logo){ echo '<span id="logo">' . $linked_site_logo . '</span>'; }
        if($linked_site_name){ echo '<span id="site-name">' . $linked_site_name . '</span>'; }
        echo '</h1>';
    }
}
?>

Belki tat ve / veya özel (tabii ki ben ikinci yöntemi tercih) bir konudur becose Şimdi, 2 sözdizimi yöntemleri 'appareance' atlayın sağlayan, soru şudur:

Does the first syntax (breakinf the 'if' statements, output the html instead of echo it, have a lot of php snippets even if they arent really needed) have some technical advantages over the second one? (for example the script run faster, is easier to debug, etc...) Or is just a open source programmers unwrited convention?

8 Cevap

Her okunabilirliği ilgili.

Ben yankı vs çıkışı ile ne demek bilmiyorum. Hiçbir fark yoktur. Onlar müşteriye gönderilen çıktı "şeyler" baskı sadece farklı yolları konum.

: Dezavantajı

echo "<div id=\"blah\">";

iki yönlüdür:

  1. Ekstra bölü koymak ve daha az okunabilir hale getirmek için çaba gerektirir; ve
  2. HTML dışında PHP kod blokları çoğu PHP editörleri tarafından vurgulanan sözdizimi olacaktır.

Ben kadar echoing HTML her durumda kötü olduğunu söyleyerek gitmek değildir, ama kesinlikle sakıncaları bir yeri vardır. cletus points out, HTML artık kurulmuyor ne ek olarak, girinti düzeyleri yani size belge yapısı içinde nerede hiçbir belirti verir. Bu benim için bir biggie.

Okumak için PHP kodu zor yapar gibi Şahsen ben, hem de ilk stil sevmediğim. Ben her zaman bir denge kurmaya çalışırlar, çok satırlı PHP ifadeleri biri <?php ?> blok ait, ancak HTML her <?php ?> bloğunun dışında aittir. Kenar durumda, örneğin, girinti düzeyleri PHP bloğunun içinde değiştirdiğinizde, bunu kapatma ve yeni bir blok başlangıç ​​doğru eğilimindedir.

Ben kenar durumlarda ilgili solucanlar bir kutu açılır ve ne zaman hangi kullanmak için olduğunu görebilirsiniz, bu yüzden resmi bir kural daima yakın <?php ?> blokları ayarını açık kaynak projeleri için sempatik değilim.

Ben eski yönteme görebiliyordu büyük "avantaj" bu genel kontrol akışı içinde her yerde HTML eklemek için daha kolay olurdu - ($ title) kontrol eğer önce çıkışa bazı HTML istiyorsa, sadece yukarıda bir satır eklemek olabilir Bu HTML ile bir yankı ya da etajer için bir şeyler kaçmaya gerek yok.

afaik Bunun nedeni, grafik tasarımcıları kendi araçları (Dreamweaver ve benzeri) HTML düzenleme olabilir. Bu araçlar sadece bu hatta tamamen gizlemek gibi php etiketlerini gösterir. Tasarımcılar ile işbirliği zaman onlar, inan bana, hangi, kodunuzu dokunmadan uzak büyük bir avantaj tasarlayabilirsiniz yolu.

Aslında onlar aynı değildir. ikinci örnekte aslında, php yorumlayıcı html öğelerini yazdırırken gereksiz bir adım yapacağız. Böylece sayfa boyutuna bağlı olarak kötü bir performans elde edilir. checout google makale http://code.google.com/speed/articles/optimizing-php.html "web, hızlı yapmanıza olanak sağlar."

Bunlar aynıdır. Bunu size daha okunabilir çünkü yapmak için kullanılır olmuştur ne sopa öneririz.

Eğer MVC takip - Eğer görünümü ve modeli (domain mantık) parçalar var. Bunun minik PHP parçaları ile HTML çünkü görünümü için ilk yöntemini kullanın ve model için size ikinci yöntemi kullanın - yine saf PHP bulunuyor. Bu afaik çok yaygın bir yaklaşım.

Örnekler:

Zend Framework - bkz zend view manual

WordPress - kodu (hatta dağınık parçalar) yöntemi 2, ve temalar yöntem 1

Kod ve biçimlendirme hem de tutarlı bir girinti bir hiyerarşi tutulması karmaşık şablonlar ile başa çıkma için önemlidir. Birinci örnekte ben hemen etiketleri yapısını görebilirsiniz; İkinci bana neler olup bittiğini anlamak için iş yapar. Bunun üzerinden okumadan bunu açık bir öğe bırakarak gibi bir şey yaptığını olmadığını göremiyorum. IMO PHP XHTML gibi yazılmış, sanki ifadeler etiketleri vardı 'if' dengelemek zorunda. Olmalıdır

(Ben standardını tercih Şahsen olsa { ... alternatif } sözdizimi : ... endif biri. I don ' t bu ne getiriyor avantaj bakın.)

Legend doğrudan PHP-şablonu çıktı herşeyi yankılanan daha marjinal daha hızlı olduğunu da vardır. Herhangi bir fark gerçekten var ama eğer beni ölçmek için çok küçük. Kesinlikle script yapıyor olacak herhangi bir başka çalışma ile karşılaştırıldığında, bu önemsiz bulunuyor. t gerçekten önemli sadece okunabilirliği. PHP olsa, bir çiftleşmiş dili - sen de bunu yararlanmak olabilir!

[Ikisi de örnekler tsk, htmlspecialchars'dan başarısız.]