Как правильно отступить PHP / HTML смешанный код? [закрытый]


при смешивании PHP и HTML, каков правильный стиль отступа для использования? Делаю ли я отступ так, чтобы выводимый HTML имел правильный отступ, или так, что PHP/HTML mix выглядит правильно отформатированным (и, следовательно, легче читается)?

например, скажем, у меня foreach цикл вывода строк таблицы. Какой из них ниже является правильным?

PHP/HTML mix выглядит правильно:

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

выводится HTML выглядит правильно:

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

я обнаружил, что когда я сталкиваюсь с этой ситуацией (довольно часто), у меня нет стандартного стиля для использования. Я знаю, что там не может быть "правильного" ответа, но я хотел бы услышать мысли от других разработчиков.

6 61

6 ответов:

PHP и HTML должны иметь отступы, чтобы они были правильными по отношению к самим себе в исходной форме, независимо друг от друга и от выводимой формы:

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

Я тоже часто задумывался над этим вопросом, но потом понял, кого волнует, как выглядит HTML-вывод? Ваши пользователи не должны смотреть на ваш HTML в любом случае. Это для вы читать, а может и пару других разработчиков. Держите источник код как можно более чистый и забудьте о том, как выглядит вывод.

Если вам нужно отладить вывод, используйте инструменты разработчика Chrome, Firebug или даже инструменты F12.

Я вообще поставил открытие PHP теги в начале строки, но отступ все, что находится внутри тегов, чтобы соответствовать форматированию html. Я не делаю этого, однако, для простых операторов echo, так как я использую короткие открытые теги. Я думаю, что это упрощает его при просмотре файла, чтобы найти все объявления.

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

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

<?    endforeach ?>
      </tr>
<?  endforeach ?>
    </table>
  1. прямой ответ на ваш вопрос: Если вам нужно часто читать вывод HTML, было бы неплохо вывести хорошо отступ HTML. Но более распространенным случаем будет то, что вам нужно прочитать исходный код php, поэтому более важно, чтобы источник был легко читаемым.
  2. альтернатива двум упомянутым вами вариантам: см. хаос' или tj111-х ответ.
  3. еще лучше на мой взгляд: не смешивайте HTML и php, используйте шаблон двигатель вместо этого.

вы всегда можете использовать немного пробелов тоже, чтобы помочь читаемости. Основываясь на отступе хаоса:

<table>

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

    <tr>

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

        Something else

    <?php endif ?>

    </tr>

    <?php endforeach ?>

</table

единственный недостаток с этим, если у вас есть большое смешанного кода он может сделать ваш документ в два раза длиннее, что делает для более прокрутки. Хотя, если у вас есть такой смешанный код, вы можете рассмотреть механизм шаблонов.

вы не должны беспокоиться о отступе разметки в рабочей среде. Также не следует использовать Tidy или другие очистители HTML. Существуют допустимые случаи использования, например, когда вы разрешаете ввод HTML (но рассмотрите возможность использования Markdown вместо этого), хотя они редки.

чаще всего HTML beautifiers-фильтры злоупотребляют, чтобы скрыть основные проблемы с кодом. Не исправляйте разметку вручную.

Если вам нужно отступить код только в среды разработки, вы можете использовать любой из вышеперечисленных. Однако имейте в виду, что эти библиотеки будут пытаться исправить вашу разметку (это их основная цель; отступ является побочным продуктом). Я написал регулярное выражение на основе инструмента отступа Dindent.

Dindent преобразует разметку следующим образом:

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

для этого:

<!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 не будет пытаться санировать или иным образом вмешиваться в ваш код, кроме добавления отступа. Это чтобы сделать вашу разработку/отладку проще. Не для производства.