OO или процедурный PHP для веб-сайта?
Я собираюсь начать работу над моим первым проектом PHP - созданием нового веб-сайта для небольшой некоммерческой организации. Исходя из фона .Net и Java, объектно-ориентированное программирование для меня очень естественно, но я не уверен, правильно ли он подходит для создания веб-сайта с умеренной сложностью в PHP. Я понимаю, что большинство PHP-сайтов написаны в основном в коде, отличном от OO.
Для веб-приложения я определенно поеду на OO-маршрут, но для довольно простого веб-сайта я не уверен. Сайт будет состоять из пяти разделов, содержащих от одной до четырех страниц контента в каждом разделе, содержащих статьи, новости, галереи изображений и несколько форм. Не существует сложного взаимодействия (за исключением нескольких довольно простых веб-форм для написания статей, комментариев, регистрации и т.д.), И нет необходимости поддерживать состояние (кроме логинов). MySQL будет использоваться для хранения данных.
Кодекс действительно не должен быть особенно расширяемым как таковой - это не веб-сайт предприятия или механизм шаблонов, о котором мы говорим, - но важно, чтобы код был довольно легко понятен для программиста с достойное количество опыта PHP. Я предполагаю, что большинство PHP-программистов не используются для OO-кода, поэтому, возможно, это один из аргументов в пользу процедурного кода?
Один аспект в пользу OO состоит в том, что будут разные типы статей, которые на уровне базы данных основаны на супертипе, содержащем большинство свойств, что, конечно, очень естественно трансалирует в OO-код.
Возможно, какой-то гибридный подход был бы лучше всего, используя объекты для представления "бизнес-объектов" и т.д., но отрисовка HTML и т.д. с использованием традиционного процедурного кода?
Комментарии очень оценены.
--Rolf
Ответы
Ответ 1
но важно, чтобы код был довольно легко понят для программиста с достаточным количеством опыта PHP.
Чтение кода не связано с парадигмой программирования, а с тем, как писать код. Я видел свою долю спагетти ООП (включая мою собственную), и я видел равное количество процессуальных беспорядков. Если код хорошо написан, даже тот, кто не имеет достаточного количества знаний PHP, должен следовать за ним.
Я предполагаю, что большинство PHP-программистов не используются для OO-кода, так что, возможно, это один момент в пользу процедурного кода?
Я сомневаюсь в этом. Я был на нескольких конференциях, и ни у кого, похоже, не было проблем с ООП. На самом деле, я даже не видел ни одной строки процедурного кода. Кроме того, все основные структуры - это полный ООП. Вы найдете процессуальную парадигму в основном в приложениях PHP4 и при поиске кода новичка.
Но чтобы ответить на ваш вопрос: я бы сказал, используя OO, если это то, с чем вам и вашим разработчикам нравится. Лично я считаю, что процедурный код в части "Вид" представляет собой плохую идею, потому что вы, скорее всего, закончите смешивание логики и кода представления для совершенно незаметных шаблонов. См. POEAA Web Presentation Patterns для некоторых более удобных подходов.
Вам не нужно использовать MVC, если вы чувствуете, что он слишком негабарит. Используйте, если хотите, контролер страниц. Но опять-таки, MVC не имеет возможности реализовать, и есть множество фреймворков, которые отнимают у вас основную тяжесть работы.
Ответ 2
Я бы рекомендовал WordPress, написав код с нуля для довольно простого сайта.
Все, что вам нужно для веб-пространства и мало времени, чтобы узнать, как настроить wp.
Посмотрите showcase
Если вы все еще хотите писать с нуля... лучше следовать за OO, возможно, вы можете использовать фреймворки, такие как Zend или Kohana
Приветствия
Ответ 3
Первое, что нужно принять при написании PHP, - это, прежде всего, язык шаблонов. PHP должен быть помещен в HTML-документ, чтобы сделать биты динамического документа.
PHP способен реализовывать проекты OO, но код, который вы пишете, будет не так хорош, как аналогичный С# -код (и, возможно, Java, но я не знаю, что Java комментировать).
Вы говорите, что у вас будет интерфейс для создания статей - это звучит сложнее, чем просто добавление небольшого динамического контента здесь или там. Это может выиграть от лечения ОО.
С другой стороны, существует много уже созданных CMS PHP, таких как wordpress, Drupal и Joomla!, который может удовлетворить ваши потребности из коробки.
В заключение - если готовое решение вас не устраивает, пройдите по OO-маршруту с помощью процедурного script, чтобы связать все это вместе.
Ответ 4
Все зависит от вашей цели.
- Если вы не хотите продлевать свой проект позже, процедурный подход в порядке.
-
Если вы сможете быстрее развить часть своего кода с помощью предопределенных объектов, то это путь.
-
Если вы можете просто записать свой код сверху вниз без особых усилий, "процедурный" тоже хорош.
Ответ 5
Я бы обязательно пошел с OO-подходом.
Вы можете использовать Zend Framework, занимаясь как MVC, так и картой persistence. Или вы можете использовать некоторые более легкие и специализированные рамки, такие как доктрина для настойчивости, и я верю (но я не уверен). Cakephp довольно легкий и хороший для MVC.
Увеличивается не только ремонтопригодность, но и вы также сокращаете время разработки, как я вижу, это беспроигрышная ситуация!
Ответ 6
Чтобы быть справедливым, любой веб-сайт, созданный на PHP, должен быть создан OO-способом. Поскольку вы также запрограммировали .NET и Java, вы должны знать, что просто кодирование в OO делает код удобным. Кроме того, это хорошая практика, если вы когда-либо планируете создавать больше сайтов с помощью PHP.
Ответ 7
Лично я считаю, что PHP-кодеры, которые не хорошо разбираются в OOP, некомпетентны и/или хорошо отстают от времени, - это не должно быть вашей причиной для приведения в порядок процедур, по крайней мере, если клиент не захочет менять небольшие штрихи но он только полностью уверен в процедурном коде.
Основным преимуществом ООП, как я вижу это для PHP, является то, что он поощряет как довольно аккуратные стили кодирования, такие как MVC (или аналогичные), так и побуждает кодеров использовать и создавать библиотеки для выполнения общих задач - это означает, что вы, как правило, получаете чище, проще поддерживать решение за гораздо меньшее время и, вероятно, с меньшим количеством неоткрытых ошибок.
Ответ 8
Если это простой веб-сайт, и контент не изменится так сильно, я бы не стал нахмуриться, если кто-то использует процедурный код для написания полного, объектно-ориентированного решения (которое может быть излишним). Например:
<?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
.
Не объектно-ориентированный, но неплохой. Меня это разочаровывает, люди, которые будут клясться, что если это не объектно-ориентированный, то это должен быть плохой код.
Ответ 9
Популярный миф о том, что процедурный не является расширяемым, является абсолютным BS. Если вам действительно нужен живой пример, посмотрите на развитие Linux-ядра в github. Несомненно, это один из самых сложных проектов в мире и его сообщество, начатое с первого дня. Таким образом, тот факт, что C полностью структурирован и процедурный по своей природе, не ограничивает его расширяемость. Кроме того, чтобы указать, что ООП представляет собой концепцию, которая эмулируется в php. На низком уровне он в конечном счете сплющивается. Держите свои логики раздельными и alwasy делать многоразовые функции. Сосредоточьтесь на пользовательских входах и дезинформируйте данные. Сосредоточьтесь на дизайне базы данных. Поскольку linus однажды сказал: "Плохие программисты сосредоточены на коде, хорошие программисты сосредоточены на структуре данных".
Ответ 10
Я бы пошел с oop. Это будет проще, и у вас будет меньше кода для перезаписи, если у вас есть что-то:)
Ответ 11
Определенно идти с OO.
Насколько мал ваш сайт, его всегда можно улучшить или расширить с помощью OO.
Также я могу порекомендовать очень хорошую и быструю структуру:
http://www.yiiframework.com/
Полностью в PHP5 и OO:)