Разделение представления и бизнес-логики на PHP

я программирую свой первый реальный PHP-сайт и мне интересно, как сделать мой код более читаемым для себя. Справочник, который я использую, - это PHP и MySQL Web Development 4th ed.

вышеупомянутой книге дает три подхода к разделению логики и содержания:

  • включаемые файлы
  • функция или класс API
  • шаблоны

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

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

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

display_header();
display_navigation();
display_content();
display_footer();

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

echo "<tr bgcolor="".$color.""><td><a href="".$url."">" ...

Я бы предпочел иметь HTML с некоторым PHP в середине, а не наоборот.

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

затем, в HTML-коде, я буду перебирать эти массивы с помощью foreach и отображать содержимое. В некоторых случаях будут показаны некоторые переменные. Если установлена переменная ошибки, я буду отображать ее в правильном положении.

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

else echo 'Error';

Это сбивает меня с толку, потому что, когда пример кода дает ошибку, она иногда повторяется даже до начала HTML...)

для людей которые использовали ASP.NET, я немного привык к файлам с кодом и lblError, и я пытаюсь сделать что-то подобное здесь.

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

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

Я думаю, что я говорю о некоторых концепциях или способах программирования PHP здесь, но я просто не знаю условия для них.

Я знаю, что это не прямой вопрос, мне просто нужна помощь в организации моих мыслей.

3 ответов


никогда эхо из HTML с PHP. Вместо этого напишите его inline ( без злых коротких тегов) как

<tr class="<?php echo $myclass; ?>">

другие варианты, помогающие отделить логику / представление, будут использовать PHP-фреймворк, такой как CodeIgniter.

Я бы бросил книгу и вместо этого сосредоточился на изучении основных навыков PHP, таких как функции, классы и т. д. Тогда начните играть в интернет несколько популярных платформ из там.

в качестве примечания: вещь, которую я не понимаю, что в большинстве примеров код, если некоторый запрос базы данных или whatnot дает ошибку, есть всегда:

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


звук, как шаблон двигателя является то, что вы ищете - спросите google для многих результатов. лично мне нравится smarty очень много.

(и выбросить эту книгу, так, как будто это... старый)


MVC (Model View Controller) звучит так, как будто это может удовлетворить ваши потребности. Вы можете прочитать об этом здесь.