Вконтакте Facebook Twitter Лента RSS

Лучшие фреймворки php. Современный PHP без фреймворков. Автозагрузка и сторонние пакеты

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

Чтобы облегчить процесс разработки сайтов, программисты стали повторно использовать куски кода, группируя их в различные модули и компоненты, и объединяя в специальные наборы готовых инструментов, которые получили название - фреймворки.

Фреймворк (framework) - готовый каркас с набором модулей, компонентов, расширения для быстрой, простой и качественной разработки программ.

PHP фреймворки позволяют:

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

В данной статье вы увидите список самых популярных PHP фреймворков с плюсами и минусами. Для сравнения инструментов разработки были выбраны следующие PHP фреймворки:

  • Laravel
  • Symfony
  • Zend Framework
  • Codeigniter

И так, поехали!

Laravel

Laravel - это бесплатный PHP фреймворк с открытым исходным кодом, созданный Тейлором Отвеллом для разработки веб-приложений по архитектурному шаблону MVC.

Можно сказать, что на появление Laravel повлияли остальные PHP фреймворки.

Он был создан как альтернатива фреймворку Codeigniter (о нем будет рассказано ниже), в котором было недостаточно полезных функций для разработки веб-приложений. В качестве основы Laravel выступают компоненты другого фреймворка - Symfony (о нем также, будет рассказано ниже).

Фреймворк Laravel очень популярен среди западных разработчиков веб-приложений.

С помощью менеджера пакетов Composer, фреймворк Laravel позволяет легко устанавливать и подключать различные компоненты для использования в веб-приложении.

Реализация шаблона ActiveRecord - Eloquent ORM, позволяет установить отношения между объектами базы данных веб-приложения и выстраивать удобные запросы для манипуляции данными.

Механизм автозагрузки классов позволяет не подключать вручную файлы через include и предотвращает загрузку не используемых компонентов.

Удобная система миграций помогает упростить развертывание и обновление веб-приложения.

В Laravel есть встроенная поддержка движка шаблонов Blade, с помощью которого можно делать простые представления веб-приложения используя специальный синтаксис.

При создании приложения можно использовать Artisan - интерфейс командной строки для ввода встроенных команд, а также создания своих собственных.

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

Из подобных функций можно отметить dd() - удобный аналог стандартной функции PHP var_dump(). Функция выводит информацию переменной в более понятной форме, разделяя данные на дерево атрибутов и значений, в возможностью поиска и перехода по ним.

Плюсы

  • Достаточно неплохая и понятная документация.
  • Вокруг фреймворка создана мощная экосистема. Различные курсы, конференции, обучающие материалы позволяют собрать вокруг фреймворка большое количество разработчиков и спонсоров, которые заинтересованы в развитии инструмента и принимают в этом участие. Да, здесь чувствуется запах маркетинга, и неплохой.
  • Одним из самых очевидных плюсов Laravel, является гибкая система маршрутизации, позволяющая составить самые разные проверки маршрута веб-приложения. Вы можете выделить маршруты в специальные группы, использовать пространство имен, указать параметры маршрута, использовать регулярные выражения, настроить поддоменную маршрутизацию и многое другое.
  • В Laravel много синтаксического сахара. Синтаксис API фреймворка достаточно простой и понятный. Здесь нет длинных и сложных конструкций, а только краткие и продуманные названия функций.
  • Laravel содержит удобный механизм обработки ошибок и исключений.
  • Фреймворк включает в себя встроенные механизмы аутентификации и авторизации пользователей, которую можно перенастроить под свои потребности.
  • Laravel предоставляет из коробки механизмы для кэширования веб-приложения с помощью Memcached и Redis. Кроме этого есть удобные функции для использования простого файлового кэширования данных.
  • Laravel предоставляет чистый и простой API поверх популярной библиотеки SwiftMailer с драйверами для SMTP, Mailgun, SparkPost, Amazon SES и sendmail, чтобы сделать отправку почты через локальную или облачную службу по выбору. В том числе есть механизм для построения очередей отправки почты.
  • Laravel Cashier обеспечивает выразительный, свободный интерфейс к сервисам биллинга по подписке Stripe и Braintree.

Минусы

  • Для русскоязычных разработчиков, без знания английского языка или его слабым знанием, к минусам фреймворка можно отнести довольно небольшое количество статей, примеров кода, переводов официальной документации. Для тех, кто знает английский на уровне чтения технической документации, данный минус можно опустить.
  • Синтаксический сахар в Laravel как плюс, так может быть и минусом. Очень легко привыкнуть к нему и позабыть, как пишутся чистые запросы и функции.
  • Нарушение обратная совместимости между версиями фреймворка.
  • Не логичное расположение каталогов и файлов. Например, по умолчанию в прямо в каталоге /app расположена модель User.php, которую логичней было бы расположить в каталоге /app/Models. Каталог resources с файлами представления размещен в корне приложения, хотя логичней будет его разместить в /app/resources.

Yii фреймворк

Yii - это бесплатный объектно-ориентированный компонентный full-stack PHP фреймворк. В основе Yii лежит другой фреймворк - PRADO, написанный на ASP.NET и впоследствии перенесенный на PHP. Вскоре после построения новой архитектуры, фреймворк PRADO был переименован на Yii. Название фреймворка является аббревиатурой слова «Yes It Is!». Прародителем фреймворка является китайский разработчик Qiang Xue.

Yii можно использовать для разработки любого вида веб-приложений. Благодаря своей основе компонентов, архитектуре и сложной поддержки кэширования, фреймворк подходит для разработки крупномасштабных проектов, таких как порталы, форумы, системы управления контентом (CMS), систем электронной коммерции, RESTful веб-сервисов и т.д.

Yii реализует для использования MVC (Model-View-Controller) архитектурный шаблон и способствует организации кода на основе этого шаблона.

Yii является full-stack фреймворком, предоставляя множество проверенных и готовых к использованию функций: построитель запросов и ActiveRecord для реляционных и NoSQL баз данных, RESTful API, поддержку многоуровневого кэширования и т.п.

Yii чрезвычайно расширяемый фреймворк в котором можно заменить почти каждый кусочек кода и разрабатывать нужные расширения.

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

Минусы

  • Слабая экосистема вокруг фреймворка среди англоязычного сегмента разработчиков. Сообщество слишком сильно размазано по разным местам: несколько форумов с небольшой активностью, stackoverflow и т.п.
  • Хоть фреймворк и позволяет делать код простым, но далеко не элегантным. Если его синтаксис сравнивать с фреймворком Laravel, то он уступает.
  • Yii отстает от языка, стандартов и других фреймворков. Новые обновления с действительно полезными функциями выходят не так часто.
  • Слишком большая связанность backend и frontend частей Yii2. Фреймворк предлагает использовать библиотеку jQuery и Bootstrap, которые встроены по умолчанию в ядро фреймворка. Этот минус планируется исправить в новой версии фреймворка Yii 3, сделав его компоненты менее связанными.
  • Не очень гибкая система маршрутизации: нет возможности сгруппировать роуты.

Symfony

Symfony - свободный PHP фреймворк для быстрой разработки веб-приложений и решения рутинных задач веб-программистов. Разработка и поддержка фреймворка спонсируется французской компанией Sensio.

Symfony состоит из набора не связанных между собой компонентов, которые можно использовать повторно в проектах.

С помощью Symfony было разработано множество крупных проектов:

  • систем управления контентом: Magento, Drupal, Opencart
  • сервис социальных закладок Delicious
  • французский видеохостинг Dailymotion
  • движок форума phpbb

В том числе, Symfony повлиял на разработку фреймворка Laravel, где были задействованы его компоненты.

Symfony позволяет устанавливать сторонние пакеты, библиотеки, компоненты и настраивать их с помощью конфигурации в форматах YAML, XML, PHP, а также.env файлах.

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

Symfony предоставляет функцию почтовой программы на основе популярной библиотеки Swift Mailer. Эта почтовая программа поддерживает отправку сообщений с ваших собственных почтовых серверов, а также с использованием популярных почтовых провайдеров, таких как Mandrill, SendGrid и Amazon SES.

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

Symfony предлагает систему логирования ошибок приложения, а также подключить библиотеку логирования Monolog.

Плюсы

  • Мощная экосистема вокруг фреймворка, с хорошим сообществом и множеством разработчиков.
  • Хорошая и постоянно обновляемая документация для всех версий фреймворка.
  • Множество различных не связанных компонентов для повторного использования.
  • Предлагает механизм функциональных и модульных тестов для нахождения ошибок в веб-приложении.
  • Подходит для сложных и нагруженных веб-проектов.электронной коммерции.

Минусы

  • Несмотря на хорошую документацию, фреймворк является сложным для изучения.

Zend Framework

Zend Framework - это свободный объектно-ориентированный PHP фреймворк для разработки веб-приложений, разработанный и поддерживаемый компанией Zend. Данный фреймворк как правило больше всего используют при разработке крупных коммерческих проектов.

Основным спонсором Zend Framework является Zend и компания Rogue Wave , но многие другие внесли компоненты или важные функции в платформу. Такие компании, как Google, Microsoft и StrikeIron, сотрудничают с Zend для предоставления интерфейсов для веб-сервисов и других технологий, которые они хотят сделать доступными для разработчиков ZF.

Компания Zend участвует в разработке ядра языка программирования PHP.

В качестве менеджера зависимостей пакетов Zend Framework использует Composer. Для тестирования веб-приложения применяется PHPUnit, а для непрерывной интеграции служба Travis CI.

Zend Framework следует стандартам PHP-FIG и включает реализацию PSR-7 для интерфейсов HTTP-сообщений.

Поддержка множества баз данных: MariaDB, MySQL, Oracle Database, IBM DB2, Microsoft SQL Server, PostgreSQL, SQLite и Informix.

Гибкий механизм кэширования по памяти или файловой системы.

Плюсы

  • Отлично подходит для разработки коммерческих веб-приложений.
  • Объектно-ориентированный подход к разработке.
  • Несвязанные компоненты для повторного использования в проектах.

Минусы

  • Не подходит для быстрой разработки проектов.
  • Для русскоязычного сегмента разработчиков мало полезных материалов по разработке.

Codeigniter

CodeIgniter - это популярный PHP микро-фреймворк с открытым исходным кодом, для разработки веб-систем и приложений. Разработан компанией EllisLab, а также Риком Эллисом и Полом Бурдиком.

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

Компоненты фреймворка слабо связаны между собой и не зависят друг от друга. ем меньше компонентов зависит друг от друга, тем более гибкой и многоразовой становится система.

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

Поэтому CodeIgniter позволяет кэшировать страницы для достижения максимальной производительности. с помощью встроенного компонента кэширования.

CodeIgniter послужил основой в разработке новых фреймворков: Kohana и Rain Framework. Многие идеи CodeIgniter были применены во фреймворках Fuel PHP и CodeLighter.

Плюсы

  • Отличная документация и англоязычное сообщество.
  • Высокая производительность фреймворка.
  • Небольшой размер фреймворка.
  • Предоставляет легкие и простые решения для разработки.
  • Подходит для быстрой разработки небольших сайтов и веб-приложений.
  • Структура фреймворка не требует строгих правил кодирования.
  • Не требует сложной настройки, почти нулевая конфигурация.
  • MVC-архитектура веб-приложения.
  • Слабая связанность компонентов.
  • Множество подключаемых библиотек и помощников.

Минусы

  • Долгий застой в развитии Codeigniter 3. Сейчас перешел к новым владельцам Технологическому институту Британской Колумбии (British Columbia Institute of Technology - ВСІТ) и находится в стадии разработки новой версии - CodeIgniter 4.

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

Краткая итоговая таблица с описанием особенностей фреймворков:

Zend Framework

Codeigniter

Лицензия

BSD MIT New BSD License MIT

Документация

отличная

неплохая

Сообщество

сильное англоязычное, русскоязычное слабое

сильное русскоязычное, англоязычное слабое

сильное англоязычное

сильное англоязычное

сильное англоязычное, упадок русскоязычного

Дополнительные пакеты и расширения

Установка через Composer

Базы данных

MySQL, Postgres, SQLite и SQL Server

MySQL, MariaDB, SQLite, PostgreSQL, CUBRID, Oracle, MSSQL

MySQL, PostgreSQL, SQLite или любая другая PDO-совместимая СУБД)

MariaDB, MySQL, Oracle Database, IBM DB2, Microsoft SQL Server, PostgreSQL, SQLite и Informix

MySQL, PostgreSQL, MSSQL, SQLite, Oracle.

Логирование

Миграции

Безопасность

Защита от SQL- injection, XSS, CSRF

Вывод

Laravel на данный момент является наиболее перспективным PHP фреймворков и подходит для создания как небольших, так и крупных веб-проектов.

Заниматься разработкой новых проектов на Yii2 по прежнему можно, как и продолжать вести существующие проекты. Версия 3 пока еще находится в разработке, поэтому Yii находится в пролете и лучше для этого взять другой фреймворк, например, Laravel.

Symfony и Zend Framework лучше всего использовать для крупных коммерческих проектов с длительным периодом разработки.

CodeIgniter не умер, а новые владельцы продолжают развитие CodeIgniter 4 .

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

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

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

Давайте рассмотрим 9 лучших фреймворков с помощью которых вы сможете создавать удивительные адаптивные сайты.

1. Symfony 2

Этот фреймворк определенно не для новичков. Со всеми его многочисленными функциями моделей, объектов, маршрутов, контроллеров он может показаться сложным. Но если у вас есть солидный объем знаний по PHP и HTML , можно создавать с его помощью невероятные веб-приложения.

Symfony — это открытый проект, размещенный на GitHub , и более 300 000 программистов работали и улучшали свой код с его помощью.

Symfony 2 состоит из набора многоразовых PHP-компонентов , которые легко устанавливаются на большинство платформ. И, как известно, он очень стабилен и гибок.

2. Phalcon

Это фреймворк, написанный на C , самая быстрая PHP-платформа. Он предлагает большое количество новейших функций, таких как маршрутизация, просмотр шаблонов, кеширование и ORM , контроллеры, язык запросов и т. д.

Phalcon всегда на шаг впереди конкурентов благодаря низким системным требованиям, которые позволяют использовать намного меньше ресурсов. А также за счет внедрения зависимостей, наборам помощников PHP , PSR-4 автозагрузчику и продвинутым функциям маршрутизации. Он подходит неопытных пользователей, так как на его изучение не уходит много времени. Вот какой фреймворк нужно выбрать в PHP .

3. Laravel

Laravel — самый популярный фреймворк 2016 года. Это также и самый простой для изучения фреймворк. Самой мощной его функцией является собственный механизм шаблонов, называемый «Blade », который не потребляет дополнительных ресурсов на вашем сайте.

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

4. Yii

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

Когда речь заходит об обеспечении безопасности, Yii работает просто удивительно . Gii , доступный в рамках Yii , это мощный генератор кода. Благодаря ему вы можете легко создавать формы, модули, CRUD , модели и т. д.

5. CodeIgniter

Надежный полнофункциональный инструмент для создания веб-приложений. Он занимает всего 2 МБ места на диске, а руководство для пользователей подробно описывает компоненты, благодаря которым можно легко обойти сложный MVC .

CodeIgniter предоставляет инструмент подстановки с шаблонами и плагинами.

6. Cake

Наш рейтинг фреймворков PHP продолжает современная среда, которая также поддерживает 9 языков, хотя она была выпущена еще в 2005 году. CakePHP 3.3 позиционируется, как мощный фреймворк.

С его помощью даже начинающие программисты смогут создать визуально привлекательные сайты. Фреймворк шаблон MVC , который представляет собой модельную поддержку для более эффективного управления данным. А также функции ORM и множество компонентов, плагинов и помощников.

CakePHP больше всего подходит для коммерческих сайтов и не требует конфигурирования, так как не содержит сложных файлов YAML или XML .

7. ZendPHP

Данный фреймворк был выпущен 9 лет назад, и до сих пор не теряет актуальности. Это объектно-ориентированный фреймворк, поэтому лучше всего использовать его для наследования или интерфейсов. Его последняя версия оптимизирована под PHP7 , но также прекрасно поддерживается и PHP 5.5 .

Zend заменил стек MVC более простой альтернативой, построенной на шаблонах промежуточного программного обеспечения, таких как Apigility .

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

8. FuelPHP

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

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

9. Slim

Гибкий PHP-фреймворк , который можно отнести к категории микрофреймворков. Он поставляется с оптимизированным маршрутизатором, функцией рендеринга шаблонов с пользовательскими представлениями, безопасными куками, функциями мгновенных сообщений, кеширования HTTP , обработки ошибок.

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

Данная публикация представляет собой перевод статьи «9 Best PHP Frameworks to Build Awesome Responsive Websites » , подготовленной дружной командой проекта

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

В этой статье мы поможем вам найти лучший PHP framework для вашей разработки, представив вам восемь лучших вариантов.

Мы поговорим о плюсах и минусах каждой платформы, её технических характеристиках и многом другом. Давайте доберёмся до этого!

В мире разработки программного обеспечения термин “framework” относится к библиотекам файлов, которые включают несколько основных функций. Цель фреймворка - предоставить вам основу, которую вы можете использовать для более эффективной разработки проектов. Чтобы сделать это, он будет включать в себя множество функций, которые вам нужно будет кодировать с нуля, если вы хотите начать с начала.

Представьте, что вы, например, пытаетесь приготовить новое блюдо. Вы бы купили много ингредиентов, которые вам нужно было бы приготовить определённым образом. Однако вам также потребуется доступ к некоторым элементам, таким как кастрюли, сковородки, ножи и разделочная доска. В этом примере все эти кухонные принадлежности будут частью базовой структуры. Без них вам бы пришлось начинать с нуля каждый раз.

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

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

8 лучших PHP framework для веб-разработки

Если вы когда-либо использовали фреймворки раньше, то вы будете знать, что каждый инструмент уникален. Помня об этом, мы сделаем всё возможное, чтобы предоставить всю информацию, которая вам понадобится, чтобы выбрать для вас лучшую среду PHP. Все эти варианты бесплатны и имеют открытый исходный код, поэтому вы можете попробовать любой из тех, которые вызовут у вас интерес. Давайте начнём с вершины!

1. Laravel

Когда люди говорят о PHP framework, чаще всего всплывает название Laravel (англ). Эта специфическая структура известна своим элегантным синтаксисом, который легко понять и с которым приятно работать.

С Lavarel вы можете быстро приступить к работе над своими проектами. Вы также сможете пропустить много основ, поскольку вы получаете доступ к таким функциям, как аутентификация пользователей, управление сеансами и кэширование. В целом, Laravel обладает всеми функциональными возможностями, которые вам понадобятся для создания современного PHP-приложения, что говорит о многом.

Если вас интересуют технические причины, по которым использование Laravel может быть разумной идеей, мы можем легко их обобщить. Во-первых, ядро ​​Laravel является надёжным с точки зрения производительности, и вы можете расширить платформу, используя множество дополнений.

Laravel также прекрасно интегрируется с другими сторонними библиотеками и платформами, такими как Amazon Web Services (AWS), что позволяет создавать высокомасштабируемые приложения. Для долгосрочных задач вы можете поставить их в очередь для асинхронного выполнения в фоновом режиме, что ещё больше повышает производительность.

Ключевые особенности:

  • Используйте структуру, которая гордится элегантным синтаксисом
  • Расширьте базовую функциональность Laravel, используя дополнения
  • Используйте встроенные функции для управления маршрутизацией, управлением пользователями, кэшированием и многим другим
  • Интегрируйте Laravel со сторонними библиотеками и платформами, такими как AWS
  • Запускайте задачи асинхронно в фоновом режиме для повышения производительности

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

2. CodeIgniter

Ключевые особенности:

  • Полная поддержка HMVC
  • Усиленная безопасность по умолчанию
  • Уникальная утилита командной строки

Фреймворк поддерживает PHP версии 5.4 и выше. Кроме того, он предлагает подробную документацию (англ), которая поможет начать разработку как можно быстрее.

Заключение

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

Как вы думаете, какой PHP framework является лучшим? Поделитесь своими мыслями с нами в разделе комментариев ниже!

Поделюсь своими рассуждениями и вставлю свои пять копеек. В статье не будет ни множества цифр, ни графиков (всяких Google Trends), только личные наблюдения.

Так вот, с выходом последних версий PHP и появлением новых версий популярных PHP-фреймворков (Zend Framework 2, Yii2 (альфа) и т.д.) — интерес к языку PHP усиливается. К слову на текущий момент язык чрезвычайно популярен. В основном среди начинающих веб-разработчиков (на данный момент он используется более чем на 80% всех веб-сайтов), и среди ресурсов со средней посещаемостью.

Есть разумеется примеры сайтов мирового масшатаба, использующих PHP:

Вернемся к вопросу PHP-фрейморков и выбору какой же из них сейчас популярен, востребован и какой следует изучать. Если говорить о западном рынке, то там безусловными лидерами по востребованности и частоте упоминания являются: Zend Framework , CodeIgniter и стремительно набирающий популярность Yii . На крупнейших мировых биржах фрилансеров oDesk и Elance кроме этой тройки часто упоминаются CakePHP и Symfony .

На просторах пост-советского пространства популярны по степени убывания:

  • Zend Framework
  • CodeInginter
  • Symfony
  • Kohana
  • CakePHP

Если резюмировать, то наиболее популярные в мире PHP-фреймворки по предпочтениям программистов и запросам работодателей это Zend Framework , CodeIgniter и Yii . Последний стремительно набирает популярность. Среди разработчиков фрилансеров распространены также Symfony и CakePHP.

Несмотря на рост популярности других скриптовых языков (вроде Python и Ruby), крупные корпорации в большинстве своем все еще останавливают свой выбор на PHP. И руководствуются при выборе платформы такими критериями как мастарибуемость, популярность фреймворка и наличие на рынке специалистов по данной платформе. В области HiLoad язык PHP немного уступает и видимо достиг своего предела. Но появляются компилируемые решения на его основе вроде kPHP, HipHop и т.д.

Что же изучать и на что ориентироваться?

Если у вас есть базовые знания PHP, вы хотели бы развиваться в этом направлении и вы хотите чтобы ваши навыки были полезными для работодателя — стоит в первую очередь присмотрется к первой тройке фреймворков: Zend , CodeIgniter , Yii . Далее стоит определится с тем какой из них будет для вас более «мил» и прост в изучении. И наконец, протестировать их.

Мое личное отношение к феймворкам следующее:

— Zend Framework — популярен но монструозен, есть проблемы с производительностью. Со знанием данного фреймвока найти работу вы сможете без труда, другой вопрос получится ли у вас «легкой войти» в него. Как по мне он сложен в изучении и начинать с него не стоит, ИМХО.

— CodeIgniter — прост и быстр. Но очень отстал в плане функционала от своих конкурентов. С него очень хорошо начинать чтобы разобраться с MVC и прочими премудростями. Но со временем функционала из коробки вам будет не доставать.

— Yii — нечто промежуточное. Чуть менее производителен чем CodeIgniter, зато содержит в себе гораздо больше функционала. Есть хорошая документация, и в целом значительно более дружественен чем Zend.

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

Я начинал с изучения CodeIgniter, полюбил его. Затем мне стало не хватать функционала и я начал искать альтернативу. На текущий момент изучаю и использую в работе Yii. Если вопрос какой PHP-фреймворк выбрать для изучения поставить ребром — то я бы все таки склонился к изучению Yii 1.1. И пусть вас не смущает активная работа над обратно-несовместимым Yii2, до его выхода в продакшн ой как далеко.

Надеюсь я был вам полезен.

  • Перевод
  • Tutorial

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


Но эта статья не о них. Она о вас. О возможности стать лучше как разработчик.


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


Возможно, ваша следующая работа не позволит вам насладиться запуском нового проекта без фреймворка. Многие важные, критические для бизнеса PHP-задачи подразумевают использование уже существующих приложений. И неважно, будет это приложение, построенное на современном фреймворке вроде Laravel или Symfony, на одной из старых платформ вроде CodeIgniter или FuelPHP - либо это удручающе широко распространённое легаси PHP-приложение с «include-oriented архитектурой» : если сейчас вы будете разрабатывать без фреймворка, то окажетесь лучше подготовлены к любом у будущему PHP-проекту.


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


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

Как работает PHP?

Прежде всего важно понять, как PHP-приложения взаимодействуют с внешним миром.


PHP исполняет серверные приложения в цикле запрос/ответ. Всё взаимодействие с приложением - из браузера, командной строки или REST API - приходит в него в качестве запросов. При получении запроса приложение загружается, обрабатывает запрос и генерирует ответ, который передаётся обратно клиенту, а приложение закрывается. И так происходит при каждом обращении.

Контроллер запросов

Вооружившись этим знанием, начнём с фронт-контроллера. Он представляет собой PHP-файл, обрабатывающий все запросы к вашему приложению. То есть это первый PHP-файл, в который попадает запрос, и (по сути) последний PHP-файл, через который проходит ответ приложения.


Давайте воспользуемся классическим примером с Hello, world !, обслуживаемым встроенным в PHP веб-сервером , чтобы проверить, всё ли настроено корректно. Если вы этого ещё не сделали, то удостоверьтесь, что в среде установлен PHP 7.1 или выше.


Создадим директорию проекта, в ней сделаем вложенную директорию public , а внутри неё - файл index.php с таким кодом:


Обратите внимание, здесь мы объявляем строгую типизацию - это нужно делать в начале каждого PHP-файла вашего приложения, - потому что подсказки типов (type hinting) важны для отладки и ясного понимания теми, кто будет заниматься кодом после вас.



php -S localhost:8080 -t public/

Теперь откроем в браузере адрес http://localhost:8080/ . Отображается Hello, world ! без ошибок?


Отлично. Переходим к следующему шагу!

Автозагрузка и сторонние пакеты

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


Выход - автозагрузка. Это означает, что, когда вашему приложению нужно использовать какой-то класс, PHP знает, где его найти, и автоматически загружает в момент вызова. Эта возможность существует со времён PHP 5, но стала активно применяться только с появлением PSR-0 (стандарта автозагрузки, сегодня заменён PSR-4).


Можно было бы пройти через тягомотину написания собственного автозагрузчика, но раз мы выбрали Composer для управления сторонними зависимостями, а в нём уже есть очень удобный автозагрузчик, то его мы и будем использовать.

Middleware

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


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


Варианты использования промежуточных слоев:

  • Отладка проблем при разработке.
  • Постепенная обработка исключений в production.
  • Ограничение частоты входящих запросов.
  • Ответы на запросы неподдерживаемых медиатипов.
  • Обработка CORS.
  • Маршрутизация запросов в соответствующие обрабатывающие классы.

Промежуточный слой - это единственный способ реализации инструментов для обработки всех этих ситуаций? Вовсе нет. Но реализации middleware позволяют сделать цикл запрос/ответ гораздо понятнее, что сильно упростит отладку и ускорит разработку.


Мы воспользуемся промежуточным слоем для последнего сценария: маршрутизации.

Маршрутизация

Маршрутизатор применяет информацию из запроса, чтобы понять, какой класс должен его обработать (например, URI /products/purple-dress/medium должен быть обработан с помощью класса ProductDetails::class с передаваемыми в качестве аргументов purple-dress и medium).


Наше приложение будет использовать популярный маршрутизатор FastRoute через реализацию промежуточного слоя, совместимого с PSR-15 .

Диспетчер middleware

Чтобы наше приложение стало работать с каким-либо промежуточным слоем, нам понадобится диспетчер.



composer require relay/relay:2.x@dev

А поскольку спецификация PSR-15 подразумевает, чтобы реализация промежуточного слоя передавала HTTP-сообщения, совместимые с PSR-7 , мы воспользуемся Zend Diactoros .


composer require zendframework/zend-diactoros

Подготовим Relay к приёму промежуточных слоев.


// ... use DI\ContainerBuilder; use ExampleApp\HelloWorld; use Relay\Relay; use Zend\Diactoros\ServerRequestFactory; use function DI\create; // ... $container = $containerBuilder->build(); $middlewareQueue = ; $requestHandler = new Relay($middlewareQueue); $requestHandler->

В строке 16 мы с помощью ServerRequestFactory::fromGlobals() будем собирать всю информацию, необходимую для создания нового запроса и передачи его Relay . Здесь запрос попадает в стек промежуточных слоев.


Теперь добавим FastRoute и обработчика запросов (FastRoute определяет, валиден ли запрос и может ли он быть обработан нашим приложением, а обработчик запросов передаёт запрос тому обработчику, что сконфигурирован для этого маршрута).


composer require middlewares/fast-route middlewares/request-handler

А теперь определим маршрут для класса обработчика Hello, world !.. Здесь мы воспользуемся маршрутом /hello , чтобы продемонстрировать возможность использования маршрута, отличающегося от базового URI.


// ... use DI\ContainerBuilder; use ExampleApp\HelloWorld; use FastRoute\RouteCollector; use Middlewares\FastRoute; use Middlewares\RequestHandler; use Relay\Relay; use Zend\Diactoros\ServerRequestFactory; use function DI\create; use function FastRoute\simpleDispatcher; // ... $container = $containerBuilder->build(); $routes = simpleDispatcher(function (RouteCollector $r) { $r->get("/hello", HelloWorld::class); }); $middlewareQueue = new FastRoute($routes); $middlewareQueue = new RequestHandler(); $requestHandler = new Relay($middlewareQueue); $requestHandler->handle(ServerRequestFactory::fromGlobals());

Чтобы всё заработало, нужно обновить HelloWorld , сделав его вызываемым классом, то есть чтобы этот класс можно было вызвать как функцию .


// ... class HelloWorld { public function __invoke(): void { echo "Hello, autoloaded world!"; exit; } }

Обратите внимание на добавленный exit; в магическом методе __invoke() . Скоро вы поймёте, к чему это.



// ... use Zend\Diactoros\ServerRequestFactory; use function DI\create; use function DI\get; use function FastRoute\simpleDispatcher; // ... $containerBuilder->addDefinitions([ HelloWorld::class => create(HelloWorld::class) ->constructor(get("Foo")), "Foo" => "bar" ]); $container = $containerBuilder->build(); // ... $middlewareQueue = new FastRoute($routes); $middlewareQueue = new RequestHandler($container); $requestHandler = new Relay($middlewareQueue); $requestHandler->handle(ServerRequestFactory::fromGlobals());

Вуаля! При перезагрузке браузера вы должны увидеть Hello, bar world! .

Правильная отправка ответов

Помните, я упомянул о выражении exit в HelloWorld ?


Это простой способ удостовериться, что мы получили простой ответ, но всё же это не лучший способ отправки выходных данных в браузер. Такой грубый подход заставляет HelloWorld делать лишнюю работу по отдаче отчетов - а этим должен заниматься другой класс, - что слишком усложняет отправку заголовков и кодов статуса , а также приводит к закрытию приложения, не давая шансов запуститься промежуточному ПО, идущему после HelloWorld .



Обновим HelloWorld для возвращения Response .


// ... namespace ExampleApp; use Psr\Http\Message\ResponseInterface; class HelloWorld { private $foo; private $response; public function __construct(string $foo, ResponseInterface $response) { $this->foo = $foo; $this->response = $response; } public function __invoke(): ResponseInterface { $response = $this->response->withHeader("Content-Type", "text/html"); $response->getBody() ->write("Hello, {$this->foo} world!"); return $response; } }

Обновим определение контейнера, чтоб HelloWorld предоставлялся со свежим объектом Response .


// ... use Middlewares\RequestHandler; use Relay\Relay; use Zend\Diactoros\Response; use Zend\Diactoros\ServerRequestFactory; use function DI\create; // ... $containerBuilder->addDefinitions([ HelloWorld::class => create(HelloWorld::class) ->constructor(get("Foo"), get("Response")), "Foo" => "bar", "Response" => function() { return new Response(); }, ]); $container = $containerBuilder->build(); // ...

Если мы сейчас обновим страницу, то получим пустой экран. Приложение возвращает из диспетчера промежуточных слоев правильный объект Response , а потом… что?


Просто ничего с ним не делает.


Нам нужен ещё один инструмент: эмиттер. Он находится между приложением и веб-сервером (Apache, nginx и т. д.) и отправляет ваш ответ клиенту, сгенерировавшему запрос. Эмиттер просто берёт объект Response и преобразует в инструкции, доступные для понимания серверным API .


Хорошие новости! Пакет Zend Diactoros , который мы уже используем для управления запросами, включает в себя эмиттер для ответов PSR-7.


Для простоты примера мы используем здесь очень простой эмиттер. Хотя он может быть гораздо сложнее, но в случае больших загрузок реальное приложение должно быть сконфигурировано для автоматического использования потокового эмиттера. Это хорошо описано в блоге Zend .


Обновим public/index.php для получения Response от диспетчера и передачи в эмиттер.


// ... use Relay\Relay; use Zend\Diactoros\Response; use Zend\Diactoros\Response\SapiEmitter; use Zend\Diactoros\ServerRequestFactory; use function DI\create; // ... $requestHandler = new Relay($middlewareQueue); $response = $requestHandler->handle(ServerRequestFactory::fromGlobals()); $emitter = new SapiEmitter(); return $emitter->emit($response);

Перезагрузим страницу - мы снова в деле! Пришло время для более надёжной обработки ответов.


В строке 15 заканчивается цикл запрос/ответ и вступает в работу веб-сервер.

Завершение

С помощью 44 строк кода и нескольких широко используемых, тщательно протестированных, надёжных, взаимодействующих друг с другом компонентов мы реализовали программу bootstrap современного PHP-приложения. Он совместим со стандартами PSR-4 , PSR-7 , PSR-11 и PSR-15 , поэтому вам доступен широкий спектр реализаций HTTP-сообщений, DI-контейнеров, middleware и диспетчеров.


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

Теги: Добавить метки

© 2024 Компьютерные для начинающих