Создание идиоматических веб-страниц на PHP

Мой опыт работы с PHP довольно ограничен. Я только что унаследовал некоторые вещи, которые кажутся мне странными, и я хотел бы знать, является ли это стандартным способом делать вещи. Страница, которая отображается в браузере (например, www.example.com/example_page) имеет что-то вроде:

<?
$title = "Page Title";
$meta = "Some metadata";
require("pageheader.inc");
?>
<!-- Content -->

Тогда у pageheader.inc есть что-то вроде:

<?
@$title = ($title) ? $title : "";
@$meta = ($meta) ? $meta : "";
?>
<html>
<head>
<title><?=$title?></title
</head>
<!-- and so forth -->

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

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

Кроме того, я знаю, что "<?"(против"<?php") нежелательно; я просто воспроизводлю то, что в коде.

6 ответов

Решение

Ну, это, конечно, не неправильный способ сделать это - но это может быть немного громоздким, чтобы читать и поддерживать. Я бы не сказал, что есть "нормальный" способ сделать что-то подобное в PHP. В конце концов, вы выводите переменные в HTML - поэтому не существует множества вариантов без использования выделенного движка шаблонов (и / или перехода к более основанному на MVC подходу, как упомянуто ryeguy).

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

Это как бы на правильном пути к MVC. MVC это все о разделении интересов. Идея в том, что первый фрагмент устанавливает значения, а затем pageheader.inc выводит их. Это держит логику вне поля зрения.

Это сделано очень небрежно.

PHP - это очень фрагментированное сообщество без "стандартного" способа работы. Тем не менее, кажется, что пример pageheader.inc, который вы разместили, может быть упрощен. Код в верхней части не приносит вам пользы. Одного этого будет достаточно:

<html>
<head>
<title><?=@$title?></title>
</head>

Если вы ищете какое-то направление по архитектуре и передовым методам, я настоятельно рекомендую проверить популярные PHP-фреймворки, такие как Codeigniter или Kohana.

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

Возможно, вы захотите взглянуть на эту статью на oreilly.com:

Понимание MVC в PHP

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

Другие вопросы по тегам