По традиции, подведем итоги уходящего года и вспомним самые значимые события в мире PHP, которых, к счастью, было немало. И конечно же, подборка со ссылками на свежие материалы за последние две недели.
С наступающим Новым годом! Приятного чтения.
Уходящий год можно по праву назвать годом PHP 7. Несмотря на то что седьмая версия интерпретатора вышла в 2015, именно в этом году крупные компании перешли на PHP 7: Badoo, Tumblr, Dailymotion, WordPress.com, Etsy (сменили HHVM на PHP 7). Некоторые даже называли графики падения нагрузки на серверах после обновления не иначе как «php7 porn». В следующем году для фреймворков Laravel 5.5 и Symfony 4 минимальной версией станет PHP 7.
Конец года ознаменовался выпуском новой мажорной версии интерпретатора — PHP 7.1 с массой улучшений.
Параллельно шла работа и над следующей версией 7.2 и уже принят ряд RFC. Кроме того Дмитрий Стогов с командой ведут работу над реализацией JIT.
В этом году ветка PHP 5.5 получила свой последний релиз 5.5.38 и больше не поддерживается. А ветка 5.6 в следующие два года будет получать только обновления безопасности.
Альтернативные реализации PHP также остаются популярными. Известная HHVM получила LTS релиз. Кроме того появились Peachpie — компилятор PHP для .NET, и Tagua VM — виртуальная машина на Rust.
Группа PHP-FIG, хоть и переживала некоторый кризис, была реформирована по плану PHP-FIG 3.0. А также выпустила в свет ряд новых стандартов:
- PSR-13: Link definition interfaces — принят
- PSR-11 Container Interface — в ревью
- PSR-14 Event Manager — черновик
- PSR-15 HTTP Middlewares — черновик
- PSR-16: Simple Cache — черновик
- PSR-17 HTTP Factories — черновик
А также в рамках Interoperability инициатив развиваются стандарты по более узким направлениям:
- Asynchronous Interoperability
- Container Interoperability
- Configuration Interoperability
- Framework Interoperability
- Event Bus Interoperability
Популярный фреймворк в этом году обозначился последним релизом включающим улучшения в ветке 1.1 — Yii 1.1.17. И целым рядом обновлений актуальной второй версии фреймворка: 2.0.7, 2.0.8, 2.0.9, 2.0.10. Активно планируется версия 2.1, и начата работа в соответствующей ветке.
К core-команде присоединился @dynasource. Запущен новый yiiframework.ru. Yii получил награду Tagline как лучший backend-фреймворк. Была опубликована книга с рецептами по Yii 2 — Yii 2 Application Development Cookbook. А также в этом году прошли конференция в Киеве и первый Хакатон по Yii.
В этом году фреймворку Symfony 2 исполнилось 5 лет. А тем временем свет увидело целых 2 релиза: фреймворка Symfony 3.1.0 и Symfony 3.2.0. Пакеты Symfony были загружены уже более 500 миллионов раз.
Фреймворку исполнилось 5 лет. В середине года вышел релиз Laravel 5.3. А также доступен план выхода ближайших версий, согласно которому 5.4 выйдет уже в начале следующего года, a 5.5 станет LTS версией и ожидается в июле 2017.
В этом году активно развивались платные продукты из экосистемы Laravel: Forge, Spark, Envoyer.
Уходящий год ознаменовался долгожданным релизом Zend Framework 3, работа над которым длилась почти 4 года. Репозиторий фреймворка был переименован из zf2 в zendframework. По фреймворку доступна книга, в том числе на русском. В это же время было объявлено о завершении поддержки Zend Framework 1. А также свет увидел Zend Expressive — микрофреймворк для создания веб-приложения на основе PSR-7 middleware.
Среди других событий уходящего года следует выделить:
- Composer 1.0.0 — Первый стабильный релиз Composer
- Phalcon 3.0.0 — LTS релиз популярного PECL-фреймворка
- Go! AOP Framework 1.0.0, 2.0.0
- Энди Гутманс покинул Zend
- 15 лет проекту Drupal
А что бы вы выделили еще? Пишите в комментариях к посту!
Новости и релизы
- Приватный Packagist — Представлен packagist.com — корпоративное SaaS решение для использования приватных зависимостей взамен Satis и Toran Proxy.
- Phalcon 3.0.3
PHP
- RFC: Class-like Primitive Types — Черновик предложения по реализации квазиобъектного поведения для примитивных типов. При этом их внутреннее представление не изменится и расширять их невозможно, но будет доступно использование
instanceof
, а в будущем — реализация общих предков, например,\Number
дляfloat
иint
. - RFC: Server-Side Request and Response Objects — Предлагается включить в ядро анонсированное совсем недавно расширение request, которое добавляет объекты Request и Response взамен суперглобальным массивам.
- RFC: Debugging PDO Prepared Statement Emulation v2 — Принято предложение по эмуляции подготовленных выражений непосредственно в PHP для удобства отладки.
Инструменты
- pbudzon/dhcp-php — Реализация DHCP-сервера на PHP. Пост и видео демо в поддержку от автора.
- clue/php-commander — Инструмент для создания простых консольных приложений с лаконичным интерфейсом.
- PHP API Clients — Организация в рамках которой реализовываются асинхронные клиенты для различных сервисов.
- naneau/php-obfuscator — Обфускатор для PHP, который парсит код и подменяет имена переменных и т.п.
- frickelbruder/kickoff — Инструмент проверяет некоторые SEO-параметры сайта и предназначен для использования в CI.
- mgp25/Instagram-API — Библиотека реализует скрытые в официальном API возможности Instagram.
Материалы для обучения
Symfony
- Symfony: миф о раздутом фреймворке
- Неделя Symfony #520 (12-18 декабря 2016)
- Неделя Symfony #521 (19-25 декабря 2016)
- Symfony — комбинируем GridFS файлы с ORM сущностями
Yii
- Разработка на Yii 2: Роутинг и создание URL
- tuyakhov/yii2-json-api — Реализация спецификации JSON API для Yii 2.
- Yii2 RESTful API-интерфейс для AngularJS
- Yii2-advanced: Делаем интернационализацию с источником в Redis
- Виджет мультиязычности в YII2 без использования базы данных
- Пример создания практичной Debug панели в Yii
Laravel
- Масштабируем Laravel с помощью AWS Elastic Beanstalk
- Создание веб-приложения на PHP с иcпользованием Firebird и Laravel
- Полиморфные связи в Eloquent
- Пример реализации логин-ссылки без пароля на Laravel
- Оптимизация производительности PHP благодаря использованию полного обозначения функций — Исследование о том, почему вызов глобальных функций
\foo()
быстрее чемfoo()
. Также доступен инструмент roave/functionfqnreplacer, который просканирует исходники и добавит слэш где необходимо. - pds/skeleton — Рекомендация по структуре PHP пакета.
- Предотвратить запуск PHP-скрипта несколько раз одновременно — О реализации блокировки.
- Наследование vs композиция и принцип открытости/закрытости SOLID
- Улучшаем тесты: ожидание vs реализация
- Семантическая подсветка переменных в PhpStorm 2016.3
- Оптимизация рекурсивных алгоритмов с помощью trampoline
- Все, что вы знаете о шифровании с открытым ключом в PHP — неверно
- Об уязвимостях (в том числе PHP) в мультимедиа модулях самолетов
- PHP модуль на C++
- Как не нужно использовать паттерн Repository
- Alameda, Bower и NPM интеграция в CleverStyle Framework
- Масштабирование ClickHouse, управление миграциями и отправка запросов из PHP в кластер
- Как мы уже 4 года выживаем в условиях двух релизов в день
- Улучшение производительности PHP 7
Аудио и видеоматериалы
- PHP подкаст #13
- Видеообзор PHP 7.1
- PHP Roundtable Podcast #057: Все о компании Zend
- Abusing PHP 7’s OPcache to Spawn Webshells
Занимательное
Спасибо за внимание и еще раз с наступающим Новым годом! Пусть он будет для вас лучше чем два предыдущих в сумме!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку. Вопросы и предложения пишите на почту или в твиттер.
» Прислать ссылку
» Быстрый поиск по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 98
Комментарии (19)
Gemorroj
26.12.2016 00:59+2>> \foo() быстрее чем foo()
это из разряда подзабытого спора echo vs print =)Fesor
26.12.2016 12:26+1ну как бы да, хотя если холивар echo vs print полностью утратил свою актуальность (потому что нынче модно делать echo ровно один раз вместо того чтобы отдавать кусками, а шаблонизаторы и так компилятся с учетом микрооптимизаций), то функции мы всеравно вызываем. И как минимум полезно знать о том, почему один вариант медленнее другого. Будете вы с этим делать чего или нет — дело ваше. Речь тут идет о профите порядка 1% а то и меньше.
Gemorroj
26.12.2016 14:58так-то да, хотя я думаю, что opcache должен оптимизировать этот момент.
Fesor
26.12.2016 18:17+2что opcache должен оптимизировать этот момент.
Увы нет. Вся суть проблемы заключается в том, что PHP язык динамический. А значит мы можем в рантайме создавать функции. И например мы один раз вызываем функцию, и она вызывается из глобальной области видимости. А потом происходит магия и вот функция вызывается уже из другой области видимости. И интерпретатору приходится это учитывать и постоянно проверять кого вызывать. Причем происходит это на этапе выполнения опкодов, так что opcache тут уже ничем не поможет (просто потому что он уже отработал и эта проверка записана в кэше опкодов).
В теории может помочь JIT но проще тупо добавлять слэш и явно указывать из какого неймспейса вызывается функция. Для JIT есть куда более существенные места для оптимизаций.
zelenin
26.12.2016 09:48+2RFC: Server-Side Request and Response Objects — Предлагается включить в ядро анонсированное совсем недавно расширение request, которое добавляет объекты Request и Response взамен суперглобальным массивам.
лучше бы каноническую реализацию psr7 добавили в ядро, чем обертку над глобальными переменными
aslanalexander
26.12.2016 13:23Вышел релиз фреймворка toKernel версии 2. А ещё они готовят cmf на его основе.
Fesor
26.12.2016 14:35+53 звездочки у версии 1.x и 0 звездочек у версии 2.x… нет composer… нет комьюнити… внутри статика и сингелтоны… А потому у меня вопрос, кому это может быть интересно и каков профит от монолитного фреймворка в 2017-ом году?
SamDark
26.12.2016 19:51+1Ну, профит-то есть. Вон Yii 2.0 нормально идёт для многих задач. А вот про интерес… это да. Не модно.
Skit25
27.12.2016 22:58Остается пожелать Yii2 скорый переход на PHP7, пользуясь случаем.
zelenin
28.12.2016 08:53+1а что вам не хватает для запуска yii2 на php7? совместимость 100%.
Skit25
28.12.2016 18:11Читаю дайджесты, что поменялось в PHP7, делаю вывод — этого не достаточно!
И вот, в самом начале этой статьи:
В следующем году для фреймворков Laravel 5.5 и Symfony 4 минимальной версией станет PHP 7.
Это как Yii1 работает на PHP5.6, но если сравнить код который был написан на php5.3, безусловно разница есть.zelenin
28.12.2016 18:17+1Читаю дайджесты, что поменялось в PHP7, делаю вывод — этого не достаточно!
ну синтаксический сахар не используется в ядре, но вы его можете использовать в своем приложении.
Это как Yii1 работает на PHP5.6, но если сравнить код который был написан на php5.3, безусловно разница есть.
5.3 => 5.6 нельзя сравнить с 5.6 => 7Skit25
28.12.2016 18:21+15.3 => 5.6 нельзя сравнить с 5.6 => 7
Тем паче!
На днях включу семерку на сервере, а то из-за не уверенности не стал использовать с Yii2.
Спасибо!
Fesor
28.12.2016 20:26что поменялось в PHP7, делаю вывод — этого не достаточно!
прирост производительности в два раза и снижение расходов на память в три раза. Как по мне этого уже должно быть достаточно. Все остальное самому фреймворку не сильно поможет.
xoma
Еще Yii 1.1.18 должен быть.
pronskiy
Спасибо, поправил текст
SamDark
Обязательно будет.