Я собираюсь начать работу над своим самым первым проектом PHP - создание нового веб-сайта для небольшой некоммерческой организации. Прибывая из .NET и фона Java, объектно-ориентированное программирование происходит очень естественно для меня, но я не уверен, является ли это правильный подход для bulding веб-сайт умеренной сложности в PHP. Мое понимание - то, что большинство основанных на PHP сайтов записано главным образом в коде неOO.
Для веб-приложения я определенно пошел бы маршрут OO, но для довольно простого веб-сайта, я не так уверен. Сайт будет состоять приблизительно из пяти разделов, с одной - четырьмя страницами содержания на раздел, содержа статьи, новости, галереи изображений и несколько форм. Нет никакого сложного включенного взаимодействия (за исключением нескольких довольно простых веб-форм для того, чтобы написать статьи, комментарии, регистрацию, и т.д.), и никакая потребность поддержать состояние (за исключением логинов). MySQL будет использоваться для хранения данных.
Код не должен действительно быть особенно расширяем как таковой - это не веб-сайт предприятия или механизм шаблонной обработки, мы говорим о - но важно, чтобы код было довольно легко понять для программиста с достойной суммой опыта PHP. Я предполагаю, что большинство PHP программистов не привыкло к коду OO, поэтому возможно, это - одна точка в пользу процессуального кодекса?
Один аспект в пользу OO - то, что будут различные типы статей, которые являются, на уровне базы данных, на основе супертипа, содержащего большинство свойств, который, конечно, переводит очень естественно в код OO.
Возможно, некоторый гибридный подход был бы лучшим, с помощью объектов для представления "бизнес-объектов" и т.д., но рендеринга HTML и т.д. с помощью традиционного, процессуального кода?
Комментарии значительно ценятся. - Rolf
, но важно, чтобы код был довольно легким для понимания программистом с приличным опытом работы с PHP.
Читаемость кода связана не с парадигмой программирования, а с тем, как код написан. Я видел свою изрядную долю спагетти ООП (включая свою собственную), и я видел столько же процедурных беспорядков. Если код написан хорошо, даже тот, кто не обладает приличным объемом знаний PHP, должен иметь возможность следовать его указаниям.
Я предполагаю, что большинство PHP-программистов не привыкли к объектно-ориентированному программированию, так что, возможно, это один аргумент в пользу процедурного кода?
Я сомневаюсь в этом. Я был на нескольких конференциях, и ни у кого не было проблем с ООП. Фактически, я не увидел ни единой строчки процедурного кода. Кроме того, все основные фреймворки полностью ООП. Вы найдете процедурную парадигму в основном в приложениях PHP4 и при просмотре кода новичков.
Но чтобы ответить на ваш вопрос: я бы сказал, используйте объектно-ориентированный подход, если это то, что вам и вашим разработчикам нравится. Лично я считаю, что процедурный код в части просмотра - плохая идея, потому что вы, скорее всего, в конечном итоге смешаете логику и код представления для совершенно неподдерживаемых шаблонов. См. Шаблоны веб-презентаций POEAA для ознакомления с некоторыми более удобными в обслуживании подходами.
Вам не нужно использовать MVC, если вам кажется, что он слишком велик. Если хотите, используйте Page Controller. Но опять же, MVC не так уж сложно реализовать, и существует множество фреймворков , которые снимут с вас основную тяжесть работы.
Первое, что нужно принять при написании PHP, - это то, что это в первую очередь язык шаблонов. PHP предназначен для размещения в HTML-документе, чтобы сделать части документа динамическими.
PHP может реализовывать объектно-ориентированные проекты, но код, который вы пишете, будет не так хорош, как аналогичный код C # (и, возможно, Java, но я не знаю Java, чтобы комментировать).
Вы говорите, что у вас будет интерфейс для создания статей - это действительно кажется более сложным, чем простое добавление небольшого динамического содержания здесь или там. Этому может помочь лечение ОО.
С другой стороны, существует множество PHP CMS, которые уже созданы, например wordpress , Drupal и Joomla! , который может сразу удовлетворить ваши потребности.
В заключение - если готовое решение вам не подходит, перейдите по пути объектно-ориентированного проектирования с помощью некоторого процедурного сценария, чтобы связать все это воедино.
Я хотел бы порекомендовать WordPress, а не писать код с нуля для довольно простого сайта.
Все, что вам нужно, это место на сайте и немного времени, чтобы научиться настраивать wp.
Посмотрите showcase
Если вы все еще хотите писать с нуля... лучше следовать ОО, возможно, вы можете использовать фреймворки, такие как Zend или Kohana
Будьте здоровы
Все зависит от вашей цели.
Если вы можете быстрее разработать часть кода, используя предопределенные объекты, то это то, что вам нужно.
Если вы можете просто записывать код сверху вниз без особых усилий, "процедурный" подход тоже подойдет.
Я бы определенно выбрал OO подход.
Вы можете использовать Zend Framework, спортивный и MVC и persistence framework. Или вы можете использовать некоторые более легкие и специализированные фреймворки, такие как doctrine для персистентности и, как мне кажется (но я не уверен), cakephp довольно легкий и хороший для MVC.
Не только повышается ремонтопригодность, но и сокращается время разработки, так что, на мой взгляд, это беспроигрышная ситуация!
Честно говоря, любой веб-сайт, созданный на PHP, должен создаваться объектно-ориентированным способом. Поскольку вы также программировали .NET и Java, вы должны знать, что простое программирование в объектно-ориентированном стиле делает код поддерживаемым. Кроме того, это хорошая практика, если вы когда-нибудь планируете создавать больше веб-сайтов с использованием PHP.
Если это простой веб-сайт, и его содержимое не изменится так сильно, то я бы не стал осуждать кого-то, кто использует процедурный код вместо написания полного объектно-ориентированного решения (что может быть излишним). Например:
<?php
switch ($_GET['filename']) {
case "news":
require_once('inc/news.php'); // your news functions
include_once('tpl/news.tpl.php'); // your news template
break;
case "events":
require_once('inc/events.php');
include_once('tpl/events.tpl.php');
break;
case "contact":
require_once('inc/contact.php');
include_once('tpl/contact.tpl.php');
break;
default:
if ($_GET['filename']=="") {
include_once('tpl/home.tpl.php');
}
else {
include_once('tpl/page_not_found.tpl.php');
}
break;
}
?>
Вышеупомянутое в файле с именем index.php
будет действовать как простой контроллер. Для небольших сайтов я использую аналогичную, хотя и немного более сложную настройку. Обычно у меня есть "бизнес-логин" в файлах в каталоге inc
(например, inc / news.php
будет содержать класс с методами для получения новостных статей и т. Д.), А затем шаблон файлы в каталоге tpl
.
Не объектно-ориентированный, но и неплохой. Это расстраивает меня, людей, которые будут слепо клясться, что если он не объектно-ориентированный, значит, это плохой код.
Я бы пошел с упом. Так будет проще, и вам придется меньше переписывать код на случай, если что-то случится :)
Определенно иду с ОО.
Каким бы маленьким ни был ваш веб-сайт, его всегда лучше модифицировать / расширять с помощью объектно-ориентированного подхода.
Также я могу порекомендовать очень хороший и быстрый фреймворк:
Полностью на PHP5 и OO :)
Лично я считаю PHP-кодеров, которые плохо разбираются в ООП, некомпетентными и / или сильно отстающими от времени - это не должно быть вашей причиной придерживаться процедурных правил, по крайней мере, если клиент захочет немного изменить его, но не уверен только в процедурном коде.
Основным преимуществом ООП для PHP, как я вижу его, является то, что оно поощряет как довольно аккуратные стили кодирования, такие как MVC (или аналогичные), так и побуждает программистов использовать и создавать библиотеки для общих задач - что означает, что вы, как правило, получаете более чистые, проще поддерживать решение за гораздо меньшее время и, вероятно, с меньшим количеством неоткрытых ошибок.