Подборка свежих новостей и материалов из мира PHP.
Вышел PHP 8.1 RC2 и уже доступен первый пакет с использованием перечислений, будет сделан форк Magento, новый тип стандартов PER в дополнение к PSR, стартовала PhpStorm 2021.3 EAP, Symfony 6 будет полностью типизирован — как обновляться?
Для PHP 8.2 предложены новые оптимизированные структуры данных.
Также в выпуске порция инструментов, полезные статьи, видео и анонсы двух митапов.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, поставьте, пожалуйста, плюс.
Новости
-
PHP 8.1 RC 2
Второй релиз-кандидат доставлен по расписанию. Обзоры новых фич в PHP 8.1 можно посмотреть в постах What's new in PHP 8.1 и PHP 8.1: before and after и на PHP.Watch.
Также уже доступно руководство по миграции на PHP 8.1.
Пара свежих переводов:
Попробовать PHP 8.1 можно из докера, например,php:8.1-rc-cli
, на маке через homebrew, или просто поклацать на 3v4l.org.
Уже появился первый пакет с использованием перечислений из PHP 8.1!
alexanderpas/php-http-enum — Енамы со статус-кодами и текстами сообщений HTTP-ответов.
-
PHP 8.0.11, 7.4.24 и 7.3.31
Обновления актуальных веток с секьюрити фиксом CVE-2021-21706.
Суть бага была в том, чтоZipArchive::extractTo
мог извлечь zip-архив за пределы целевого каталога при определенных именах путей к файлам на Windows.
-
The Future of Magento
Открытое письмо от участников сообщества Magento. В нем они объявили, что будет форк Magento, управляемый общественной организацией. Цель в том, чтобы обеспечить долгосрочную опенсорсную жизнь Magento.
Adobe анонсировали, что планируют декомпозицию Magento на микросервисы. Как конкретно это будет проходить — непонятно. Поэтому и будет создан форк. Он будет совместим с адоубивской Magento, до тех пор, пока та будет открытой.
-
PhpStorm 2021.3 Early Access Program Is Open
Стартовала программа раннего доступа PhpStorm 2021.3. Каждую неделю публикуем новые билды, в которых можно первым пощупать новые фичи.
В релизе будет полная поддержка PHP 8.1, много улучшений для дженериков, новые опции для деплоймента, обновленный интерфейс отладчика и много другого.
-
PER Workflow — PHP-FIG
PHP-FIG одобрила идею PHP Evolving Recommendations. В дополнение к PSR-стандартам теперь будут PER — это такие рекомендации, которые могут постоянно изменяться и дополняться. Например, в случае код-стайла пополнятся правилами для новых возможностей языка.
PHP Internals
-
Новые структуры данных в PHP
В PHP есть универсальная структура данных — массив, которую можно использовать и как обычный список, и как ассоциативный массив, и как очередь, стек и т.п.
Универсальность достигается благодаря тому, что под капотом используется хеш-таблица. Но за такую универсальность приходится платить дополнительной памятью.
В SPL есть более специализированные структуры данных, но у них багаж своих проблем.
Tyson Andre предлагает добавить новые оптимизированные реализации структур данных в PHP.
Одним из вариантов было бы добавить структуры из популярного расширения php-ds/ext-ds, но его автор не поддерживает эту идею. Подробности вот тут.
Поэтому пока есть два RFC:-
[RFC] final class Vector
Структура вектор — это набор элементов с последовательными индексами 0, 1, 2 и т.д. Памяти требует в два раза меньше, чем текущие массивы и работает быстрее структур из SPL.
В плане API это обычный класс с реализацией интерфейсовArrayAccess
,IteratorAggregate
иCountable
.$values = new Vector(); for ($i = 0; $i < $n; $i++) { $values[] = $i; } for ($i = 0; $i < $n; $i++) { echo $values[$i]; }
-
[RFC] final class Deque
Deque — это двухсторонняя очередь, то есть элементы можно добавлять и удалять как в начало, так и в конец.
Использовать можно везде, где былиSplQueue
илиSplDoublyLinkedList
и сходу получить выигрыш в производительности, и уменьшить расход памяти.
ТакжеDeque
актуален для долгоиграющих приложений, в которых используются большие массивы.
Реализации этих и других структур доступны в расширении TysonAndre/pecl-teds.
-
[RFC] final class Vector
Инструменты
- mrsuh/php-generics — Ещё одна попытка реализации дженериков на PHP. Интересная статья от автора в поддержку: PHP Generics. Right here. Right now
- spiral/roadrunner 2.4 — Большое обновление сервера приложений для PHP на Golang. В релизе: поддержка очередей, key-value хранилищ, интеграция с Temporal. Подробности.
- dwgebler/doclite — NoSql хранилище на PHP (На базе SQLite)
- vjik/codeception-db-populator — Модуль для Codeception, позволяющий загружать только необходимые таблицы и данные для текущего теста. Ускоряет выполнение тестов и повышает удобство подготовки данных для них.
- brick/date-time — Пакет с набором иммутабельных классов для работы с датой и временем.
Symfony
-
Подготовка ваших приложений и пакетов для Symfony 6
В ноябре выйдут Symfony 5.4 и 6.0. Разница между ними в том, что Symfony 5.4 по-прежнему будет содержать все устаревшие функции, а в Symfony 6.0 — все они удалены.
Кроме того, и в Symfony 5.4 и в 6.0 добавлены PHP-типы во все свойства, аргументы и возвращаемые значения методов, где возможно.
Как обновлять приложения на Symfony и его пакетах подробно описано в посте от одного из членов Symfony Core Team: Symfony 6: PHP 8 Native Types & Why we Need YOU.
- Для Symfony Flex больше не нужен будет flex.symfony.com — Все рецепты теперь лежат на github.com/symfony/recipes.
Laravel
- Livewire — Релиз 2.6.0 Описание изменений. Видеообзор от канала CutCode.
- mateusjunges/laravel-kafka — Драйвер для работы с Apache Kafka.
-
tpetry/laravel-postgresql-enhanced — Расширенный драйвер для Postgres. Позволяет регистрировать расширения, управлять табличными представлениями, более тонко конфигурировать индексы, использовать Postgres-типы данных, такие как
bit
,tsvector
,citext
,inet
,cidr
. - Про работу с фикстурами в тестах.
- Стратегии уменьшения количества запросов в приложении Laravel.
Статьи
- Советы по тестированию от Matthias Noback: Один класс — один тест?, Тестировать что угодно лучше, чем ничего не тестировать?, Пишите юнит-тесты как сценарии.
- Что происходит, когда мы клонируем объекты в PHP?
- Про структуру данных Either.
- Про создание типа `Option` на PHP.
- Версионирование API или единая кодовая база для всех версий.
- Сравнение инструментов для генерации thumbnails: imgproxy, thumbor, imaginary, picfit, imageproxy и weserv/images.
- Видишь уязвимости? А они есть! Наше исследование популярных CMS-систем на PHP.
- Ускорение сайта путём выявления проблемных участков кода: Xdebug + PhpStorm.
- Локальная разработка пакетов (Сomposer + PhpStorm) — Полезный пост на канале Beer::PHP ????.
Аудио/Видео
- Серия роликов об устройстве Xdebug 3 от автора расширения Derick Rethans.
Сообщество
- Запуск видеокурса, который заставил меня снова поверить в себя — Christoph Rumpel рассказывает, как запускал курс masteringphpstorm.com и сколько заработал на нем.
- PHP Самара — YouTube-канал самарского PHP-сообщества.
- Митап: Производительность бэкенда — 30 сентября ManyChat и SuperJob проводят митап для PHP-разработчиков. Спикеры из Авито, «Ситимобила», ManyChat и SuperJob. Офлайн + Онлайн.
- Митап: Как выжить при быстром росте — 28 сентября в 19:00 на YouTube-канале Podlodka. В программе пара докладов про PHP от Qonversion и Ситимобил.
- Все ближайшие мероприятия можно посмотреть на phpcommunity.ru.
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 211
Комментарии (3)
Mozhaiskiy
01.10.2021 21:29Массивы-векторы это вроде бы хорошо. Ещё со времён AS3 помню, насколько вектора быстрее и компактнее "обычных" массивов — иногда в памяти нужно хранить и обрабатывать большие сложные структуры, для которых нафиг не нужны "ассоциативные" ключи, тут высокопроизводительный вектор бы очень помог, особенно вектор из векторов (и далее по измерениям :) Другой вопрос, что Php всё больше пытается усидеть сразу на всех стульях и чуток теряет целостность своей идеологии. Но в любом случае, развитие это хорошо.
shuchkin
Роман, спасибо за обзор!