разделяя php и html ... почему? - PullRequest
6 голосов
/ 31 мая 2009

Итак, я видел некоторые комментарии на различных веб-сайтах, страницах и вопросах, которые я задавал о разделении php и html.

Я предполагаю, что это означает:

<?php

myPhpStuff();

?>

<html>

<?php

morePhpStuff();

?>

Вместо:

<?php

    doPhpStuff();

    echo '<html>';

    ?>

Но почему это важно? Это действительно важно сделать или это предпочтение?


Также кажется, что когда я начинал использовать PHP, выполнение чего-то вроде прерывания PHP в цикле while могло вызвать ошибки. Возможно, это больше не так или никогда не было.


Я сделал небольшой пример с этой концепцией, но мне это кажется таким грязным:

<?php

$cookies = 100;
while($cookies > 0)
{
    $cookies = $cookies -1;
?>
    <b>Fatty has </b><?php echo $cookies; ?> <b>cookies left.</b><br>

<?php

} 

?>

Существуют ли случаи, когда лучше просто иметь HTML внутри PHP?

<?php

$cookies = 100;
while($cookies > 0)
{
    $cookies = $cookies -1;

    echo'<b>Fatty has </b> '.$cookies.' <b>cookies left.</b><br>';
} 

?>

Ответы [ 11 ]

16 голосов
/ 31 мая 2009

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

Например, скажем, у вас был веб-сайт по прокату DVD, а на домашней странице вы показали список доступных DVD. Вам нужно сделать несколько вещей: получить данные DVD из базы данных, извлечь и / или отформатировать эти данные и, возможно, смешать некоторые данные из нескольких таблиц. отформатируйте его для вывода, объедините данные DVD с HTML, чтобы создать веб-страницу, которую пользователь увидит в своем браузере.

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

Общий шаблон для этого называется MVC (контроллер вида модели) . Возможно, вы также захотите взглянуть на библиотеку Smarty - это широко используемая библиотека PHP для разделения представления и логики.

8 голосов
/ 31 мая 2009

Давайте проясним, что не является разделением

  • Вы переключаетесь из режима PHP в режим HTML
  • вы используете операторы print или echo для записи html-кода
  • вы используете небольшие фрагменты php внутри html файлов

Если вы сделаете это, разделения не будет вообще, независимо от того, выйдете ли вы из php в html-блоки или сделаете это другим способом и поместите php-код в html.

Посмотрите на хороший шаблонный движок, в разделах руководства "зачем использовать ...." есть множество причин. Я бы с suggert www.smarty.net особенно http://www.smarty.net/whyuse.php

Он ответит на все ваши вопросы теперь у вас есть.

4 голосов
/ 31 мая 2009

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

лучший способ - это отделить вашу логику (где большая часть кода - PHP) в разных файлах (даже каталогах) от ваших файлов подкачки (где большая часть кода - HTML, XML, CSV, ...).

это беспокоит разработчиков на протяжении многих лет, и есть рекомендации по решению этих общих проблем, которые называются шаблонами проектирования.

, поскольку не каждый обладает опытом и может применять эти шаблоны проектирования в своем приложении, некоторые опытные разработчики создают Frameworks, который поможет другим разработчикам использовать все знания и опыт, заложенные в основу этой инфраструктуры.

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

4 голосов
/ 31 мая 2009

Очень важно отделить логику приложения от логики представления в проектах. Преимущества включают в себя:

  • Удобочитаемость : Ваш код будет намного легче читать, если он не смешивает PHP и HTML. Кроме того, HTML может стать трудным для чтения, если он хранится и экранируется в строках PHP.
  • Возможность повторного использования : Если вы жестко закодируете строки HTML в коде PHP, код будет очень специфичным для вашего проекта, и вы не сможете повторно использовать его в последующих проектах. С другой стороны, если вы пишете небольшие функции, которые выполняют одну задачу за раз, и помещаете HTML в отдельные файлы шаблонов, повторное использование кода в будущих проектах будет возможно и намного проще.
  • Работа в команде : Если вы работаете в команде, в которую входят разработчики и дизайнеры, разделение логики приложения и шаблонов представления будет выгодно обоим. Разработчики смогут работать с приложением, не беспокоясь о презентации, а дизайнеры (которые не обязательно будут знать PHP) смогут создавать и обновлять шаблоны, не вмешиваясь в PHP-код.
3 голосов
/ 31 мая 2009

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

В конечном счете, я считаю, что это зависит от предпочтений, однако я чувствую, что у разделения есть следующие плюсы:

  • Код Tidier
  • Меньше поля ошибок
  • Легко интерпретировать
  • Легче изменить элементы HTML
  • Легче изменить логику приложения
  • Ускоренная загрузка (HTML не идет из Parser-> Browser, он идет прямо в браузер)

Однако некоторые минусы могут быть:

  • Работает только в PHP5 (полагаю, может быть не так, исправить при необходимости)
  • Возможно, это не то, к чему привыкли
  • Неопрятный, если сделано неправильно (без отступов и т. Д., Но то же самое с чем угодно)

Но, как вы видите, плюсы перевешивают "минусы". Постарайтесь не смешивать и то, и другое: некоторое разделение и некоторую интеграцию - это может запутать вас и других разработчиков, которые работают с вами.

Надеюсь, это помогло.

2 голосов
/ 31 мая 2009

Функционально: они оба будут работать, поэтому в конечном итоге это предпочтение.

Тем не менее, вы можете считать, что комментарии также являются предпочтением, ваш код будет компилироваться и выполняться точно так же без комментариев. Однако большинство людей согласны с тем, что комментарии необходимы для написания и поддержки хорошего кода. Я вижу это как похожую тему. В долгосрочной перспективе будет проще читать и поддерживать код, если они разделены.

Так это важно? Я бы сказал, да.

2 голосов
/ 31 мая 2009

Преимущества первого метода (разделение PHP и HTML):

  • Вам не нужно экранировать символы

  • Это также возможно для редакторов кода выделить / сделать отступ для разметки.

  • Возможно, легче читать

  • У этого метода нет недостатков, по сравнению со вторым методом.

1 голос
/ 31 мая 2009

Ой!

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

1 голос
/ 31 мая 2009

Это говорит о том, что то, что вы помещаете в echo '', сначала обрабатывается языком программирования, а затем отправляется в браузер, но если вы поместите туда HTML-код без php, этот код будет загружаться быстрее, потому что в этом нет никакого программирования .

И вторая причина, как говорили выше люди, заключается в том, что ваш «большой программный код» должен храниться отдельно от html-кода, а в html-коде просто нужно сделать несколько вызовов для вывода результатов наподобие «echo $ variable». Или используйте шаблонизатор, такой как Smarty (как я).

С уважением, Александр.

1 голос
/ 31 мая 2009

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

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