Ответ 1
Если вы хотите отделить PHP от HTML, вы можете использовать механизм шаблонов (например, smarty http://www.smarty.net/).
Я изучил PHP, взломав phpBB2, даже представив несколько модов в свою базу данных, которые другие загружали и использовали. (Я не верю, что phpBB2 уже поддерживается phpBB3 так долго, поэтому базы данных v2 mods больше нет.)
Одна из моих любимых вещей в phpBB - это их система шаблонов, которая позволяет редактору полностью отделять HTML и PHP. PHP файлы содержат PHP: логику, запросы к базе данных и активацию шаблонов. В файлах TPL содержались шаблоны: HTML, переменные шаблона и специализированные комментарии HTML для условных или повторяющихся блоков.
Однако, когда я вижу кого-то PHP-код в Интернете, это либо небольшой фрагмент, работающий с одной функцией, либо такой, или PHP полон строк, содержащих HTML (или, что еще хуже, HTML с чередованием PHP). phpBB - единственный PHP, на который я смотрел, который действительно отделяет язык и язык разметки, предлагая мне, что малое, если таковые имеются, другие кодовые базы PHP делают такую вещь.
Я хочу снова начать работу с некоторым PHP, но на этот раз это не будет форум phpBB, и он будет в команде. Основываясь на моем опыте, разделение PHP и HTML необычно (пожалуйста, поправьте меня, если я ошибаюсь!). Тем не менее, я так привык к этой разделительной линии, я ненавижу читать смешанные PHP и HTML.
В "реальном мире" программирования PHP, какой предпочтительный метод:
Если вы хотите отделить PHP от HTML, вы можете использовать механизм шаблонов (например, smarty http://www.smarty.net/).
Мы используем настраиваемую базу воспламенителя кода для MVC и просто разделяем логику и макет. это не обязательно означает, что в нашем html нет php, просто чтобы его не использовали для логики. Совершенно нормально перебирать набор записей с php-кодом в шаблоне imho, просто не пытайтесь говорить с бизнес-объектами и на самом деле делать что-то в шаблонах макета. Вы также можете подумать о чем-то вроде tal или о миллионе других для шаблонов, если вы действительно хотите избавиться от всего PHP-кода там, Я вроде бы думаю, что в основном перебор, хотя, если "вставить здесь особое обстоятельство"
редактировать фиксированная опечатка
Лично я не вижу причин добавлять систему шаблонов/язык в микс, когда PHP уже является хорошим решением.
Мой предпочтительный подход - отделить отображение от логики приложения. Это может иметь форму полномасштабной структуры MVC. Однако, это также может быть простым вопросом, как вы собираетесь писать свой код.
расширения:
С тех пор, как я ошибся в перемещении моего HTML с обильным количеством ASP-кода, я попытался отделить логику страницы от отображения. В пределах одной страницы это означает размещение всей логики страницы вверху, сохранение информации, которая будет отображаться в переменных, а затем повторение их в HTML в нижней части файла PHP. Единственной логикой, которая появляется в части HTML, является логика отображения. Другими словами, простая обработка ошибок, ifs, loops и т.д. В принципе, те же самые вещи, которые вы найдете на большинстве шаблонов языков.
Моя причина избегать шаблонов языков - это еще одна форма синтаксиса, о которой мне нужно беспокоиться. Какой смысл? PHP предоставляет больше, чем мне нужно для этой цели.
Между тем, вы можете сделать простой подход MVC, разделив вещи:
controller.php
<?php
// some application logic
$data['message'] = 'Hello, World.';
include 'view.php';
exit;
?>
view.php:
<html>
<head>
<title>
A simple 'MVC' view
</title>
</head>
<body>
<p>
<?php
echo $data['message'];
?>
</p>
</body>
</html>
Это не лишено недостатков и проблем. Однако, если вы считаете, что можете иметь полное, чистое разделение между логикой приложения и дисплеем, вы ошибаетесь.
По моему опыту, много PHP-разработок, будь то лучше или хуже, заканчивается тем, что php файлы связаны друг с другом, включив в них распечатывать фрагменты HTML по мере необходимости.
Разумеется, большая часть моего PHP-опыта - это нечто большее, чем просто "нам нужно что-то, что работает", чем "нам нужно самое элегантное и эффективное решение"
всякий раз, когда я вижу кого-то PHP-код в Интернете, это либо небольшой фрагмент, работающий с одной функцией, либо такой, или PHP полон строк, содержащих HTML (или, что еще хуже, HTML с чередованием PHP).
Да, общее качество кода там смущает.
В то время как вы можете перейти к полномасштабному шаблону, который может быть чрезмерным, и во многих случаях ограниченные языки, которые они предоставляют, будут мешать вам, когда вы можете просто написать логику представления в PHP.
Если вы хотите писать обычный PHP, но без спагетти:
Сохраните код действия в верхней части файла или в другом файле. Поместите здесь только логику приложения, а не какие-либо HTML или шаблоны. Любая информация, сгенерированная на этом этапе, которая должна отображаться шаблоном, должна идти в переменной, которая должна быть передана в шаблонную часть, не print
изредка в середине загрузки бизнеса логика.
Познакомьтесь с шаблонами на основе шаблонов и примените их к PHP. Имейте единую правильную иерархию кода для логики представления HTML и PHP, как будто вы пишете "хорошо сформированный XML (независимо от того, используете ли вы XHTML или нет). Избегайте размещения HTML в строках любой ценой.
Определите более простой способ вызова htmlspecialchars()
, потому что в противном случае набирать, что все время будет настоящей болью, и если вы не вводите его все время, когда у вас будет потенциальная безопасность -чувствительные ошибки.
Подводя итог, например:
<?php
// active code here
// do things
// put any errors in a $errors array
// this trivial function would presumably be in an include
//
function h($s) {
echo htmlspecialchars($s, ENT_QUOTES);
}
?>
<body>
<?php if (count($errors)!=0) { ?>
<ul id="errors">
<?php foreach ($errors as $error) { ?>
<?php h($error); ?>
<?php } ?>
</ul>
<?php } ?>
...
</body>
В "реальном мире" программирования PHP, какой предпочтительный метод:
О, в реальном мире программирования на PHP средний проект имеет путаницу подходов, брошенных вместе без всякой мысли. В реальном мире код не поддается контролю, исправлен ошибкам и небезопасен. Вы не хотите смотреть на отраслевой стандарт, потому что отраслевой стандарт должен быть разбит во всех отношениях.
Я предпочитаю использовать систему шаблонов, чтобы свести к минимуму количество PHP-кода, содержащегося в файлах HTML. Я действительно не вижу возможности полностью отделить PHP от HTML, но я чувствую, что достаточно отделить бизнес-логику (базу данных) от логики представления.
Моя система шаблонов выпекается дома, но я уверен, что вы можете найти разнообразие, которое будет работать, предварительно создавая поиск в google.
Основываясь на моем опыте, разделение PHP и HTML необычно
True. Но много кода PHP написано неопытными разработчиками. Кроме того, PHP не поощряет, а скорее препятствует написанию хорошего кода, а возможность смешивания HTML с программным кодом является одним из примеров этого.
Если вы ожидаете сделать высококачественный код, чтобы иметь возможность легко поддерживать и расширять его, я настоятельно рекомендую использовать механизм шаблонов или что-то подобное. Смешивание обоих оказывает огромное влияние на читаемость вашего кода и приведет к тому, что со временем все становится хуже и хуже. Рефакторинг будет болезненным, если не невозможным.
Теперь у вас есть большой выбор способа отделить HTML от PHP
Наиболее очевидным является использование существующего механизма компоновки. Их очень много, очень хорошо сделано и очень малоэффективно.
Вы также можете написать свой собственный движок. Возможно, это не очень хорошая идея для большого проекта (зачем изобретать колесо?), Но может быть решением либо в крошечном проекте, либо когда вам нужно что-то очень специфическое.
Последний способ, который я использую в большинстве проектов, - создать XML из бизнес-уровня (сериализация XML довольно проста в PHP), а затем использовать XSLT для преобразования этой страницы в HTML. Он позволяет создавать веб-сайты, которые намного проще в обслуживании и более легко понять, и, кстати, позволяет при необходимости получать доступ к данным веб-сайта (загружая XML вместо страницы HTML). С другой стороны, он значительно снижает производительность, поэтому не предназначен для больших веб-сайтов с тысячами запросов в секунду.
Большинство кода начинаются с строк PHP и HTML, а затем превращаются в систему шаблонов во время большой перезаписи. Разделение контента с логики вперед требует проектирования, планирования и коммуникации между командой. Использование XML или JSON вместо массивов PHP, поскольку формат данных делает это проще.