Nasıl düzgün girinti PHP / HTML karışık kod için?

5 Cevap php

PHP ve HTML karıştırma, kullanmak için uygun girinti tarzı nedir? Ben Çıktılanan HTML doğru girinti, ya da PHP / HTML karışımı düzgün biçimlendirilmiş bakar (ve okumak böylece daha kolay) o vardır ki girinti musunuz?

Örneğin, ben bir foreach döngü tablo satırları çıktısı söylüyorlar. Aşağıdakilerden hangisi doğrudur?

PHP/HTML mix looks correct:

<table>
  <?php foreach ($rows as $row): ?>
    <tr>
      <?php if ($row->foo()): ?>
        <?php echo $row ?>
      <?php else: ?>
        Something else
      <?php endif ?>
    </tr>
  <?php endforeach ?>
</table>

Outputted HTML looks correct:

<table>
<?php foreach ($rows as $row): ?>
  <tr>
  <?php if ($row->foo()): ?>
    <?php echo $row ?>
  <?php else: ?>
    Something else
  <?php endif ?>
  </tr>
<?php endforeach ?>
</table>

Ben bu durumun (oldukça sık) içine çalıştırdığınızda, ben kullanmak için standart bir tarzı yok olduğunu tespit ettik. Ben bir "doğru" cevabı olmayabilir biliyorum, ama diğer geliştiricilerin düşüncelerini duymak isteriz.

5 Cevap

Bunlar birbirlerinden bağımsız olarak ve çıkışı formunun, kaynak biçiminde kendileri ile ilgili olarak doğru olduğu kadar PHP ve HTML her bir girintili olmalıdır:

<table>
<?php foreach ($rows as $row): ?>
    <tr>
    <?php if ($row->foo()): ?>
        <?php echo $row ?>
    <?php else: ?>
        Something else
    <?php endif ?>
    </tr>
<?php endforeach ?>
</table>

Ben genelde opening php satırın başında etiketleri, ama html biçimlendirme maç etiketleri içinde ne olursa olsun girinti koydu. Kısa-açık etiketlerini kullanmak beri basit yankı tablolar için, ancak, bunu yapmayın. Ben tüm bildirimleri bulmak için dosya üzerinden tarama zaman daha basit yapar düşünüyorum.

    <table>
<?  foreach ($foo as $bar): ?>
      <tr>
<?    foreach ($bar as $baz): ?>

         <td><?=$baz?></td>

<?    endforeach ?>
      </tr>
<?  endforeach ?>
    </table>

Ben genellikle çok bu soruyu düşündü, ama sonra kim HTML neye benzediğini umurunda, fark? Sizin kullanıcıları zaten HTML bakıyor olmamalıdır. Bu YOU okumak, ve belki birkaç diğer geliştiriciler için bulunuyor. Mümkün olduğunca temiz kaynak kodunu tutmak ve çıkış gibi göründüğünü unutun.

Yani şahsen ben o kadar çok açılış kullanın ve (ben çoğu durumda heredoc veya yankılanırken tercih) PHP etiketlerini kapanış olmaz, ancak ben ilk örneği tercih ettiğini söyledi.

Her zaman okunabilirliği yardımcı olmak için çok boşluklarla biraz kullanabilirsiniz. Kaos 'girinti Bina:

<table>

<?php foreach ($rows as $row): ?>

    <tr>

    <?php if ($row->foo()): ?>
        <?php echo $row ?>
    <?php else: ?>

        Something else

    <?php endif ?>

    </tr>

    <?php endforeach ?>

</table

Bu ile sadece olumsuz a lot karma kod varsa iki kat daha uzun, daha fazla kaydırma yapar belgenizi yapabilirsiniz olduğunu. Eğer bu kadar karışık kod varsa bir çiftleşmiş motoru düşünebilirsiniz rağmen.

Sen üretim ortamında biçimlendirme girinti hakkında rahatsız edilmemelidir. Ne Tidy veya diğer HTML temizleyicileri kullanmak gerekir. Geçerli kullanım durumlar vardır, örneğin, HTML girişini izin yaparken bu nadir olsa da, (ama Markdown yerine kullanmayı düşünün).

Çoğu zaman HTML beautifiers-filtreleri kodu ile temel sorunları gizlemek için istismar edilmektedir. Yapmak değil. Elle biçimlendirme düzeltin.

Sadece geliştirme ortamında kodunuzu girinti gerekiyorsa, yukarıdaki birini kullanabilirsiniz. Ancak, bu kütüphaneler (; girinti bir yan üründür, bu birincil amaç değil) İşaretlemenizi düzeltmek için çalışır sakının. Ben Düzenli İfade tabanlı girinti aracı yazdık Dindent.

Dindent böyle biçimlendirme dönüştürür:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <script>
    console.log('te> <st');
    function () {
        test; <!-- <a> -->
    }
    </script>
    <div>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <div><table border="1" style="background-color: red;"><tr><td>A cell    test!</td>
<td colspan="2" rowspan="2"><table border="1" style="background-color: green;"><tr> <td>Cell</td><td colspan="2" rowspan="2"></td></tr><tr>
        <td><input><input><input></td></tr><tr><td>Cell</td><td>Cell</td><td>Ce
            ll</td></tr></table></td></tr><tr><td>Test <span>Ce       ll</span></td></tr><tr><td>Cell</td><td>Cell</td><td>Cell</td></tr></table></div></div>
</body>
</html>

Buna:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script>
    console.log('te> <st');
    function () {
        test; <!-- <a> -->
    }
    </script>
        <div>
            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
            <div>
                <table border="1" style="background-color: red;">
                    <tr>
                        <td>A cell test!</td>
                        <td colspan="2" rowspan="2">
                            <table border="1" style="background-color: green;">
                                <tr>
                                    <td>Cell</td>
                                    <td colspan="2" rowspan="2"></td>
                                </tr>
                                <tr>
                                    <td>
                                        <input>
                                        <input>
                                        <input>
                                    </td>
                                </tr>
                                <tr>
                                    <td>Cell</td>
                                    <td>Cell</td>
                                    <td>Ce ll</td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td>Test <span>Ce ll</span></td>
                    </tr>
                    <tr>
                        <td>Cell</td>
                        <td>Cell</td>
                        <td>Cell</td>
                    </tr>
                </table>
            </div>
        </div>
    </body>
</html>

Dindent sterilize veya başka girinti ekleyerek ötesinde kodu ile müdahale denemez. Bu geliştirme / hata ayıklama daha kolay hale getirmektir. Üretim için değil.