Какова наилучшая практика использования при использовании PHP и HTML?
Я разрабатываю веб-сайты некоторое время, но есть одна вещь, о которой я никогда не был уверен в использовании 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 и т.д.
Ответы
Ответ 1
Есть разные мнения по этому поводу. Я думаю, что есть два хороших способа:
-
Используйте механизм шаблонов, например Smarty, который полностью разделяет код и презентацию.
-
Используйте второй пример, но при смешивании PHP в HTML только выходные переменные. Делайте всю логику кода в одном блоке до вывода чего-либо или отдельного файла. Например:
<?php $content = doSomething();
// complex calculations
?>
<html>
<body>
<?php echo $content; ?>
<div id="some_div">Content</div>
</body>
</html>
Большинство полнофункциональных рамок приложений привносят свои собственные стили; в этом случае обычно лучше следовать указанному стилю.
Ответ 2
Я думаю, это будет зависеть от вашей группы или вашей собственной принятой конвенции. И он может и должен варьироваться в зависимости от того, какой тип файла вы работаете. Если вы следуете шаблону MVC, ваши представления должны быть последними. Если вы пишете класс или какой-то не-вывод script/code, вы должны использовать его.
Попробуйте сохранить разделение отображения или форматирования вывода и логику, которая предоставляет данные. Например, скажем, вам нужно сделать быструю страницу, которая запускает простой запрос и выводит некоторые данные. В этом случае (там, где нет другой существующей инфраструктуры или структуры) вы можете поместить логику в include или в верхнюю или нижнюю часть файла. Пример:
<?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>
Или вы можете разместить определения логики и функций в файле include или в нижней части файла.
Теперь, если вы создаете какой-то класс, который имеет выход (на самом деле это не так), вы должны эхом отослать HTML или вернуть его из вызываемого метода. Предпочтительно возвращать его так, чтобы он мог выводиться всякий раз, когда бы ему это ни хотелось.
Ответ 3
Выделение синтаксиса является важным преимуществом второго метода, как вы сказали. Но также, если вы придерживаетесь хороших практик, когда логика и презентация разделены, вы, естественно, обнаружите, что ваши файлы, содержащие HTML, почти полностью являются HTML, что, естественно, снова приводит к вашему второму методу. Это стандарт для сред MVC и т.п. У вас будет куча файлов, все PHP, логика, а затем, когда это будет сделано, они будут включать в себя файл презентации, который в основном является HTML с разбрызгиванием PHP.
Ответ 4
Простой:
Больше PHP - закрыть HTML в PHP. Когда вы создаете HTML-код в PHP, когда вы делаете что-то вроде класса, так что лучше сделать его в эхо.
Меньше PHP - закрыть PHP в HTML. Это вещи, как просто класть vars в поля HTML-материала, например формы... И такие.
Ответ 5
Если вы можете, используйте вместо этого механизм шаблонов.
Хотя сначала немного проще смешивать HTML и PHP, их разделение упрощает работу в дальнейшем.
Я бы рекомендовал проверить TemplateLite, который основан на Smarty, но это немного более легкий вес.
Ответ 6
Лучший подход - отделить HTML от PHP с помощью системы шаблонов или, по крайней мере, своего рода скелет HTML, например:
<main>
<header/>
<top-nav/>
<left-col>
<body />
</left-col>
<right-col />
<footer/>
</main>
Каждый node представляет файл шаблона, например. main.php, hrader.php и т.д. Чем вам нужно отделить PHP-код от шаблонов, как что-то вроде functions.php, и тщательно использовать второй подход к файлам шаблонов и сохранить функции чистыми от "эхо" и HTML.
Ответ 7
Я пришел к выводу, что использование представлений в среде MVC, например, Laravel, Yii, CodeIgniter, - лучший подход, даже если вы не отображаете html сразу.
Внутри представления выполняйте все отображение и циклическую обработку подготовленных переменных, не создавайте и не вызывайте там функции, если только не форматируете существующие данные, например, дату, в конкретный формат date('Ym-d', strtodate(123456789)
). Он должен использоваться только для создания HTML, а не для его обработки. Вот для чего у контроллеров есть контроллеры.
Если вы используете простой PHP, создайте свою собственную функцию просмотра для передачи 3 переменных в файл html, массив переменных, и если вы хотите получить вывод в виде строки или распечатать его сразу для браузера. Я не вижу в этом необходимости, так как использование фреймворков в значительной степени является стандартом. (Я мог бы улучшить ответ в будущем, создав функцию для просмотра сгенерированного HTML). Пожалуйста, см. Добавленное редактирование ниже в качестве примера.
Фреймворки позволяют вам получить HTML-код представления вместо его отображения. Поэтому, если вам нужно создать отдельные таблицы или другие элементы, передайте переменные в представление и верните HTML.
Различные fremeworks могут использовать различные типы шаблонных языков, например, blade. Они помогают форматировать данные и существенно упрощают работу с шаблонами. Кроме того, нет необходимости использовать их для отображения данных или, если они вынуждены использовать их в рамках, просто выполнить необходимую обработку перед публикацией переменных и просто "распечатать" их, используя что-то вроде {{ yourVariable }}
или {{ yourVariable.someProperty }}
Редактировать: здесь обычный PHP (не фреймворк PHP) - репозиторий simple-php-view в качестве библиотеки образцов представления, которая позволяет генерировать HTML с использованием переменных. Может быть подходящим для школьных/университетских проектов или таких, где рамки могут быть не разрешены.
Репозиторий позволяет генерировать HTML в любое время, вызывая функцию и передавая ей необходимые переменные, аналогично фреймворкам. Затем отдельно сгенерированный HTML может быть объединен другим представлением.
Ответ 8
Это зависит от контекста. Если вы выводите много HTML с атрибутами, вам будет неловко избегать кавычек в строках PHP. Однако нет необходимости использовать ?><p><?
вместо echo "<p>";
. Это действительно вопрос личного вкуса.
Ответ 9
Второй метод - это то, что я обычно использую. И это был метод по умолчанию для меня тоже. Это просто полезно, чтобы заставить php работать внутри html, а не выводить html-код. Но мне пришлось изменить файл httpd.conf, так как мой сервер просто закомментировал php-код.