Какую практику лучше всего использовать при использовании PHP и HTML? - PullRequest
17 голосов
/ 10 ноября 2010

Я давно занимаюсь разработкой сайтов, но есть одна вещь, в которой я никогда не был полностью уверен при использовании PHP и HTML.Лучше ли иметь весь документ на PHP и echo HTML, например, так:

<?php
  doSomething();
  echo "<div id=\"some_div\">Content</div>";
?>

Или иметь HTML-файл, подобный такому, и просто добавить в PHP:

<html>
<body>
  <?php doSomething(); ?>
  <div id="some_div">Content</div>
</body>
</html>

echo HTML кажется более уместным, особенно если по всей странице используется множество PHP, но при этом теряется все форматирование HTML, то есть цвета в IDE и т. Д.

Ответы [ 9 ]

23 голосов
/ 10 ноября 2010

Существуют различные мнения по этому поводу. Я думаю, что есть два хороших способа:

  • Используйте шаблонизатор, такой как Smarty , который полностью разделяет код и представление.

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

    <?php $content = doSomething();
       // complex calculations
    ?>
    <html>
    <body>
      <?php echo $content; ?>       
      <div id="some_div">Content</div>
    </body>
    </html>
    

Большинство полноценных каркасов приложений имеют свои собственные стили выполнения этого; в этом случае обычно лучше следовать предоставленному стилю.

10 голосов
/ 10 ноября 2010

Я думаю, это будет зависеть от вашей группы или вашей собственной принятой конвенции.И это может и должно варьироваться в зависимости от типа файла, в котором вы работаете. Если вы следуете шаблону MVC, то ваши представления должны быть последними.Если вы пишете класс или какой-либо не выходной сценарий / код, то вам следует использовать первый.

Старайтесь разделять отображение или форматирование вывода и логику, которая предоставляет данные.Например, скажем, вам нужно создать быструю страницу, которая выполняет простой запрос и выводит некоторые данные.В этом случае (там, где нет другой существующей инфраструктуры или инфраструктуры), вы можете разместить логику во включаемом файле, в верхней или нижней части файла.Пример:

<?php
  # define some functions here that provide data in a raw format
?>
<html>
<body>
  <?php foreach($foo = data_function($some_parameter) as $key => $value): ?>
  <p>
    <?=$value;?>
  </p>
  <?php endforeach; ?>
</body>
</html>

Или вы можете поместить определения логики и функций во включаемый файл или внизу файла.

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

3 голосов
/ 10 ноября 2010

Подсветка синтаксиса является важным преимуществом второго метода, как вы сказали. Но также, если вы следуете передовой практике, когда логика и представление разделены, вы, естественно, обнаружите, что ваши файлы, содержащие HTML, почти полностью являются HTML, что, естественно, снова приводит к вашему второму методу. Это стандарт для MVC-фреймворков и тому подобного. У вас будет куча файлов, которые все на PHP, выполняют логику, а затем, когда это будет сделано, они будут включать файл презентации, который в основном представляет собой HTML с небольшим количеством PHP.

2 голосов
/ 10 ноября 2010

Лучший подход состоит в том, чтобы отделить HTML от PHP, используя систему шаблонов или, по крайней мере, какой-нибудь скелет HTML, такой как:

<main>
    <header/>
    <top-nav/>
    <left-col>
        <body />
    </left-col>
    <right-col />
    <footer/>
</main>

Каждый узел представляет файл шаблона, например, main.php, hrader.php и так далее. Чем вам нужно отделить код PHP от шаблонов как что-то вроде functions.php и тонко использовать ваш второй подход к файлам шаблонов и поддерживать функции чистыми от "echos" и HTML.

2 голосов
/ 10 ноября 2010

Если вы можете, вместо этого используйте шаблонизатор.

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

Я бы порекомендовал проверить TemplateLite , основанный на Smarty , но немного более легкий.

2 голосов
/ 10 ноября 2010

Simple:

Подробнее PHP - закрыть HTML в PHP. Когда вы генерируете HTML-код в PHP, когда вы делаете что-то вроде класса, лучше сделать это в echo.

Меньше PHP - закрыть PHP в HTML. Это все равно что просто помещать переменные в поля HTML, например, в формы ... И все такое.

1 голос
/ 07 апреля 2019

Я пришел к выводу, что использование представлений в среде MVC, например, Laravel, Yii, CodeIgniter, является лучшим подходом, даже если вы не отображаете html сразу.

Внутриview выполняет все отображение и циклическую обработку подготовленных переменных, не создает и не вызывает там функции, если только не форматируют существующие данные, например, дату, в определенный формат date('Y-m-d', strtodate(123456789)).Он должен использоваться только для создания HTML, а не для его обработки.Это то, для чего у фреймворков есть контроллеры.

Если вы используете простой PHP, создайте свою собственную функцию просмотра для передачи 3 переменных в файл html, массив переменных, и если вы хотите получить вывод в виде строки или сразу же распечатать его.для браузера.Я не вижу в этом необходимости, так как использование фреймворков в значительной степени является стандартом. (я мог бы улучшить ответ в будущем, создав функцию для просмотра сгенерированного HTML-кода) Пожалуйста, см. Добавленное ниже редактирование в качестве примера.

Фреймворки позволяют вам получать HTML-код представления вместо его отображения.Поэтому, если вам нужно создать отдельные таблицы или другие элементы, передайте переменные в представление и верните HTML.

Различные fremeworks могут использовать различные типы шаблонных языков, например, blade.Они помогают форматировать данные и существенно упрощают работу с шаблонами.Кроме того, нет необходимости использовать их для отображения данных или, если они вынуждены использовать их в рамках, просто выполнить необходимую обработку перед публикацией переменных и просто «напечатать» их, используя что-то вроде {{ yourVariable }} или {{ yourVariable.someProperty }}

Редактировать: вот простой PHP (не фреймворк PHP) - simple-php-view репозиторий в качестве библиотеки примеров представления, которая позволяет генерировать HTML с использованием переменных.Может быть подходящим для школьных / университетских проектов или таких, где фреймворки могут быть запрещены.

Хранилище позволяет генерировать HTML в любое время, вызывая функцию и передавая ей необходимые переменные, аналогично фреймворкам.Затем отдельно сгенерированный HTML может быть объединен другим представлением.

0 голосов
/ 28 июля 2016

Второй метод - это то, что я обычно использую. И это был метод по умолчанию для меня тоже. Это просто удобно, чтобы заставить php работать внутри html, а не выводить html-код. Но мне пришлось изменить файл httpd.conf, так как мой сервер только что закомментировал код php.

0 голосов
/ 10 ноября 2010

Это зависит от контекста.Если вы выводите много HTML с атрибутами, вам надоедает экранировать кавычки в строках PHP.Однако нет необходимости использовать ?><p><? вместо echo "<p>";.Это действительно вопрос личного вкуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...