Что такое PHP-FAN.

Немного истории.

PHP-FAN (PHP Framework from Alexandr Nosov или, если больше нравится, - "фанат PHP") - фреймворк, работа над которым началась еще в далеком 2001 году. За время своего развития фреймворк несколько раз практически полностью переписывался, но всегда сохранял свою основную идею - блочность. Зарождение этого фреймворка началось при разработке портала "Весь Харьков". Первая версия PHP-FAN имела процедурный тип программирования и в ней использовались, в основном, сторонние PHP-библиотеки. Начиная со второй версии, PHP-FAN стал уже объектно-ориентированным и начал постепенно "обрастать" собственными библиотеками: для работы с БД и другими источниками данных, для обработки шаблонов, и т.п. В настоящее время для работы предлагается 5-я версия PHP-FAN, но работа над его усовершенствованием продолжается все время. Пятая версия PHP-FAN работает под управлением PHP 5.3+. Под более низкими версиями PHP, возможна работа только с PHP-FAN.4, который сейчас уже никак не поддерживается.

Что такое блочность.

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

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

Как решается этот вопрос в PHP-FAN - каждый блок имеет собственный автономный контроллер, который отвечает только за содержимое своего блока. Данные формируемые таким контроллером могут передаваться либо в шаблон, либо на основе этих данных может формироваться без-шаблонный структурированный контент (XML, JSON и т.п.). Таким образом, для того чтобы использовать один и тот же блок несколько раз, достаточно просто подключить его в соответствующих местах, а наполнение происходит автоматически. Более того, если для отображения блока необходимы дополнительные CSS- или JavaScript-файлы, они будут загружены автоматически.

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

Более подробно информация о блоках изложена здесь.

Программирование как строительство.

php-FAN5

Очень часто программирование сравнивают со строительством. Если проводить такую параллель, то можно представить это как строительство домов с помощью жилых секций, каждая из которых представляет собой готовую комнату. Только для классического MVC-фреймворка это будет секция, содержащая только стены с пустыми дверными и оконными проемами. А в PHP-FAN это секция, в которую уже вставлены окна, двери, сделана внутренняя и внешняя отделка стен и даже расставлена мебель. Еще в этом "гипотетическом" доме от PHP-FAN можно легко, ничего не разрушая, вынуть любую секцию и заменить её на другую или просто переставить её в иное место.

PHP-FAN это MVC?

Теперь стоит задать вопрос: так что PHP-FAN это не MVC-фреймворк? Отвечу - и да, и нет. В PHP-FAN есть модель, мало отличающаяся от классической. Но нужно признать, что из-за того, что мы именно блоки делаем функционально законченными единицами, то часть бизнес-логики перетекает из модели в контроллеры блоков. Модель здесь надо рассматривать скорее просто как источник данных, формирующий данные в соответствии с условиями, заданными в контроллерах. Для формирования контента чаще всего используется не один контроллер, как в классическом фреймворке, а множество контроллеров-блоков. Окончательную форму контенту, для отправки в браузер, придает объект view. Объект view всегда создается один для всех блоков, задействованных в формировании контента. Но с одними и теми же блоками можно задействовать различные типы view. Другими словами, можно сформировать HTML-, XML- JSON- или другой контент, используя один и тот же набор блоков.

Что такое entity?

Модель представляет собой набор классов entity. Entity - это образ источника данных. Для каждого типа данных создается свой класс entity. Entity отдают данные в виде объектов двух типов: row и rowset. Rowset содержит себе набор из нескольких row. Для получения данных производится обращение к определенному методу entity и он возвращает нам row или rowset. Существуют понятия "простые" и "комплексные" данные. Для получения простых данных вся логика уже реализована внутри ядра PHP-FAN. Для получения комплексных данных программист может создавать свои методы внутри классов entity. Если для кого-то работа с entity окажется неприемлемой, он может отказаться от них и задействовать сторонние библиотеки, например Doctrine. В настоящее время entity формируют данные только на основе БД MySQL. Сейчас ведется работа над тем, чтобы можно было получать данные из самых разных источников:

  • различные реляционные и не реляционные БД;
  • SOAP-, REST- и другие запросы к внешним ресурсам;
  • XML-, YAML-, INI- и другие типы файлов данных;
  • наборы обычных текстовых или бинарных файлов на диске;
  • и т.д.;

Более подробно работа с entity описана здесь.

Преимущества PHP-FAN.

Какие преимущества к построению проектов дает тот подход, что реализован в PHP-FAN? Благодаря "узкой специализации" блоков происходит четкая структуризация проекта. Удается по максимуму избежать "копи-паста" и "дублирования кода". Такая централизация и специализация в обработке данных и формировании контента делает максимально удобной работу в команде, над крупным проектом, особенно когда два или более разработчиков решают параллельные задачи. Упрощается анализ "чужого кода". Легко решаются процессы, связанные с доработкой кода на постоянно развивающихся проектах. Использование entity в качестве источника данных позволяет вносить изменения в структуру источника данных, избегая изменений в котроллерах или сводя эти изменения к минимуму. Во многих случаях как в entity, так и в блоках для реализации множества задач достаточно использования методов, уже реализованных в базовых родительских классах, поэтому эти классы в проекте часто состоят из одного-двух коротких методов. А подчас могут и вообще не содержать никаких методов.

Где взять PHP-FAN?

Скачать чистый дистрибутив PHP-FAN можно здесь. А вот здесь вы можете получить набор тестов-примеров, иллюстрирующих работу с теми или иными составляющими PHP-FAN. Новички могут тесты-примеры использовать в качестве обучающей программы для работы с PHP-FAN. Продвинутые пользователь могут использовать тесты в качестве "рыбы" при разработке новых классов.

Ищу партнёров (пока на добровольных началах) для:
  • написания и/или перевода текстовой документации;
  • тестирования и написания отчетов по багам;
  • совершенствования и доработки кода;
  • практического использования PHP-FAN в своих проектах.
Ищу спонсоров или бизнес-партнеров для развития проекта.