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

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

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

Смесь 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 выглядит правильно:

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

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

Solutions Collecting From Web of "Как правильно отступать PHP / HTML смешанный код?"

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. Однако я не делаю этого для простых выражений эха, поскольку я использую короткие теги. Я думаю, что это упрощает его при просмотре файла, чтобы найти все объявления.

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

Если вам нужно отступывать код только в среде разработки, вы можете использовать любой из указанных выше. Однако будьте осторожны, что эти библиотеки попытаются исправить вашу разметку (это их основная цель, отступ – побочный продукт). Я написал инструмент для углубления на основе регулярных выражений 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 не будет пытаться санировать или иным образом мешать вашему коду, кроме добавления отступов. Это упростит вашу разработку / отладку. Не для производства.