Я уже давно разрабатываю веб-сайты, но есть одна вещь, о которой я никогда не был уверен в использовании 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 и т. Д.
На этом есть разные мнения. Я думаю, что есть два хороших способа:
Используйте шаблонный движок, такой как Smarty, который полностью разделяет код и презентацию.
Используйте свой второй пример, но при смешивании PHP в HTML только выходные переменные . Делайте всю логику кода в одном блоке до вывода чего-либо или отдельного файла. Вот так:
<?php $content = doSomething(); // complex calculations ?> <html> <body> <?php echo $content; ?> <div id="some_div">Content</div> </body> </html>
Большинство полномасштабных прикладных инфраструктур привносят свои собственные стили; в этом случае обычно лучше следовать указанному стилю.
Я думаю, что это будет зависеть от вашей группы или вашей собственной принятой конвенции. И он может и должен варьироваться в зависимости от того, какой тип файла вы работаете. Если вы следуете шаблону MVC, ваши представления должны быть последними. Если вы пишете класс или какой-то не-выходной скрипт / код, вы должны использовать его.
Попытайтесь сохранить разделение отображения или форматирования вывода и логики, предоставляющей данные. Например, скажем, вам нужно сделать быструю страницу, которая запускает простой запрос и выводит некоторые данные. В этом случае (там, где нет другой существующей инфраструктуры или структуры) вы можете поместить логику в 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 или вернете его из вызываемого метода. Предпочтительно возвращать его так, чтобы он мог выводиться всякий раз, когда бы ему это ни хотелось.
Как вы сказали, подсветка синтаксиса является важным преимуществом второго метода. Но также, если вы придерживаетесь хороших практик, когда логика и презентация разделены, вы, естественно, обнаружите, что ваши файлы, содержащие HTML, почти полностью являются HTML, что, естественно, снова приводит к вашему второму методу. Это стандарт для сред MVC и т. П. У вас будет куча файлов, все PHP, выполнение логики, а затем, когда это будет сделано, они будут включать в себя файл презентации, который в основном является HTML с разбрызгиванием PHP.
Просто:
Подробнее PHP – закрыть HTML в PHP. Когда вы создаете HTML-код в PHP, когда вы делаете что-то вроде класса, так что лучше сделать его в эхо.
Меньше PHP – закрыть PHP в HTML. Это материал, как просто класть vars в поля HTML-материала, вроде форм … И таких.
Если можно, используйте вместо этого механизм шаблонов.
Хотя сначала немного проще смешивать HTML и PHP, их разделение упрощает работу в дальнейшем.
Я бы рекомендовал проверить TemplateLite, основанный на Smarty, но немного более легкий.
Лучший подход – отделить HTML от PHP с помощью системы шаблонов или, по крайней мере, своего рода скелет HTML, например:
<main> <header/> <top-nav/> <left-col> <body /> </left-col> <right-col /> <footer/> </main>
Каждый узел представляет файл шаблона, например main.php, hrader.php и т. Д. Чем вам нужно отделить PHP-код от шаблонов, как что-то вроде functions.php, и тщательно использовать второй подход к файлам шаблонов и сохранить функции чистыми от «эхо» и HTML.
Это зависит от контекста. Если вы выводите много HTML с атрибутами, вам будет неловко избегать кавычек в строках PHP. Однако нет необходимости использовать ?><p><?
вместо echo "<p>";
или. Это действительно вопрос личного вкуса.
Второй метод – это то, что я обычно использую. И это был метод по умолчанию для меня тоже. Это просто полезно, чтобы заставить php работать внутри html, а не выводить html-код. Но мне пришлось изменить файл httpd.conf, так как мой сервер просто закомментировал php-код.