
Подборка свежих новостей и материалов из мира PHP.
В выпуске: PHP теперь использует GitHub для трекинга багов; вышел PhpStorm 2021.3; закончена поддержка PHP 7.3, а 7.4 — в режиме только секьюрити фиксов; для PHP 8.2 снова обсуждается перегрузка операторов — теперь с новым ключевым словом.
Также в выпуске полезные статьи, пачка инструментов, видео и другие новости сообщества.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
⚡️ Новости
- 
Баги PHP теперь на GitHub
 Предложение мигрировать баги с bugs.php.net на GitHub принято практически единогласно.
 Раздел php/php-src/issues уже открыт и можно видеть первые созданные баги.
 
- 
Вышел PhpStorm 2021.3
 Мажорное обновление IDE с кучей улучшений. Из основного:- Полная поддержка PHP 8.1.
- Улучшена поддержка дженериков (особенно для doctrine/collections и eloquent/collections из Laravel 9).
- Рефакторинг перемещения классов и неймспейсов с помощью drag-and-drop.
- Инструменты удаленной разработки.
- Улучшения деплоймента и других подсистем.
 
 Проверки PhpStorm можно запускать в CI благодаря Qodana for PHP — это отдельный инструмент от JetBrains, который работает на движке PhpStorm. Можно использовать, например, для поиска проблем совместимости с PHP 8.0 / 8.1.
 
- 
Закончена поддержка PHP 7.3
 Для PHP 7.4 активная поддержка тоже завершена, но еще в течение года будут выходить исправления проблем безопасности в случае их обнаружения.
 phpreleases.com — На этом ресурсе есть API для получения информации о поддерживаемых версиях PHP.
 
- 
[RFC] User Defined Operator Overloads
 Снова на обсуждении предложение добавить перегрузку операторов в PHP. На этот раз довольно интересный хоть и спорный подход.
 Раньше предлагалось для каждого оператора определить магический метод, например,__add()для+или__mul()для*.
 В текущей редакции RFC предлагается ввести новое ключевое словоoperator. Оно используется вместоfunctionи по сути делает то же самое, но позволяет использовать символы операторов вместо имен функций.class Collection { // Ранее предлагалось вот так function __add(Collection $other, OperandPosition $operandPos) {} // А теперь вот так operator +(Collection $other, OperandPosition $operandPos) {} }
 Нужна ли в PHP перегрузка операторов? Есть ли применение в ваших приложениях?
 
- 
2022 PHP Landscape Report Survey
 Ежегодный опрос PHP-сообщества от Zend.
 Скоро будет запущен опрос русскоязычного сообщества от spasibo_kep и PHP-чатов/каналов, ну а пока можно заполнить опрос от Zend.
 
- 
Начата работа над PSR стандартом для i18n
 Задачи интернационализации и локализации встречаются повсеместно и иметь общий стандарт было бы отлично.
 Пока сформирован мета-документ, в котором описаны цели и не-цели стандарта. А также собирается рабочая группа, в которую среди прочих вошел samdark.
 
???? Инструменты
- Доступны официальные докер-образы PHP 8.1.
- 
aimeos/macro — Трейт для расширения классов с помощью замыканий. Аналог Macroableиз фреймворка Laravel.
- Xhprof-UI.js — Веб-интерфейс для быстрого анализа дампов профайлера XHProf.
- marcj/topsort.php — Библиотека для быстрой топологической сортировки элементов. Может быть использована для разрешения зависимостей.
- 
maglnet/ComposerRequireChecker — Инструмент проверит, что все используемые зависимости вашего проекта указаны явно в composer.json.
- ArtARTs36/php-merge-request-linter — Инструмент для валидации merge/pull-реквестов.
- 
MarkBaker/EnumHelper — Несколько полезных трейтов для использования в перечислениях PHP 8.1.
 ???? Зло ли трейты или нет — мы уже обсуждали на стриме.
 Но вот теперь вопрос: зло ли трейты в енамах?
 
 Symfony
 Symfony
- symfony/demo 2.0 — Официальное демо-приложение от Symfony обновлено и теперь использует Symfony 6.0. Приложение следует всем рекомендованным практикам.
- 
eXsio/php-symfony-arc — А это другой пример демо-приложения. Тут также сделан блог на Symfony 6, но реализована ентерпрайз-архитектура для крупных и масштабируемых приложений.
 Подробнее в постах автора PHP: Symfony Demo meets Modular, Microservice-ready Architecture — Part 1, Part 2.
 
- 
Introducing Docker support — Symfony Flex теперь может автоматически генерировать и обновлять docker-compose.ymlдля проекта.
- loophp/repository-monadic-helper — Расширение для Doctrine, позволяющее использовать репозитории в функциональном стиле с помощью монад.
 Laravel
 Laravel
- cybercog/laravel-ban — Пакет позволит быстро сделать блокирование (бан) для eloquent-модели.
- A complete guide to Laravel Sail — Подробный разбор обёртки над докером — Laravel Sail.
- Kubernetes, Helm, Laravel, PHP-FPM, Nginx, GitLab the DevOps Way
- ???????? Что нового в Laravel Collections.
- ???? Using a Laravel REST API with a NuxtJs App
 Yii
 Yii
- yiisoft/di — DI-контейнер совместимый с PSR-11 от команды Yii.
???? Статьи
- 
 Строим эффективный сетевой обмен в PHP-микросервисах Строим эффективный сетевой обмен в PHP-микросервисах
- 
 Самые заметные изменения языка php за последние годы. Самые заметные изменения языка php за последние годы.
- На adventofcode.com каждый день открывается по одной интересной задаче по программированию.
 Larry Garfield публикует разбор и решения задач на PHP в функциональном стиле.
 
???? Аудио/Видео
- ???? PHP in 2021 — Новое видео от Brent Roose. Также в виде статьи.
- ???? Working with the JIT Compiler — Советы по работе с JIT.
- ???????????? PHP и Laravel дайджест ноябрь 2021.
- ???????????? Spiral Ecosystem news #1: RoadRunner + CycleORM + Spiral Framework stream
- ???????????? BeerPHP SPb Meetup #3: Дмитрий Елисеев — «Вертикальное разделение кода», Владимир Закотнев (Лента.Онлайн) — Про SQL-инъекции, Сергей Кирьяков (Лента.Онлайн) — Микросервисы и RabbitMQ, Денис Пенкин (DPROMO) — Про кеширование.
???? Сообщество
- Shardj/zf1-future — Ребятки поддерживают форк ZendFramework 1 совместимый с PHP 8.
- 
 Потрясающее будущее PHP-стека для карьеры Потрясающее будущее PHP-стека для карьеры
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
 Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
 ← Предыдущий выпуск: PHP-Дайджест №216
Комментарии (11)
 - casnerano14.12.2021 23:48+1- Согласен в комментариями выше - функционал действительно не помешает, и есть ряд задач, для которые приемлемо выполнение арифметических выражений над объектами, работа с теми же множествами, длинная арифметика и прочее.. - Что касается варианта реализации: 
 с одной стороны, хорошо бы придерживаться тех. же магических методов,
 но с другой стороны:
 1. будут сложности с неймингом операторов.
 2. кол-во маг. методов будет сильно возрастет.
 мне кажется, вариант с operator лучше.
 - MARDEN15.12.2021 12:07- Shardj/zf1-future — Ребятки поддерживают форк ZendFramework 1 совместимый с PHP 8. - Никак не закопают стюардессу :) 
 - SamDark15.12.2021 19:30+1- Macroable из фреймворка Laravel — совершенно ужасная фича, убивающая статанализ и рефакторинг. 
 
           
 
Jsty
Пожалуйста, не надо перегрузки операторов.
Ранее всегда было ясно, что в данном контексте в условно хорошем коде будут int/float.
pxz
Иногда нужно работать либо с большими числами, либо с числами с фиксированной точностью, либо с большой мантиссой. Для этого в PHP удобных нативных инструментов нет.
Для организации Decimal существует экстеншн: https://github.com/php-decimal/ext-decimal. Как раз там как бы реализована перегрузка операторов на уровне экстеншна, то есть:
Также небезвестное решение: https://github.com/brick/math. В этом случае используются методы вроде
sum(...)Всё же, привычные арифметические операторы были бы удобны здесь. Но остаётся открытым вопрос сложения, например, нативного
intс каким-тоBigInteger.Хотелось бы остановиться на том, что результатом операций с привычными бинарными операторами будут числа в том или ином представлении (тот же
BigIntegerилиDecimal). Дальше уже вопросы типизации.bolk
Мне кажется тут давно нет вопросов:
Mozhaiskiy
Позволю себе не согласиться с вами. После Си и плюсов перегрузки операторов иногда очень сильно не хватает. Регулярно попадаются объекты, которые могут складываться и вычитаться. Разные наборы прав, свойства, сложные объекты дат.
Для меня ещё с PHP4 загадка, почему array_merge() не имеет синонима в виде обычного "+" это же собственно, сложение массивов в чистом виде.
t_kanstantsin
потому что обычный "+" уже делает свою работу https://www.php.net/manual/en/language.operators.array.php
Mozhaiskiy
Так ведь это union только для хэшей, где идёт проверка на уникальность ключа. А "обычные" массивы, где нет ключей, так не объединить. ['a', 'b'] + ['c', 'd'] в php будет ['a', 'b'] (т.к. индексы 0 и 1 уже заняты), а вовсе не ['a', 'b', 'c', 'd'], как можно было бы ожидать.
Но речь не об этом. В случае своего объекта я бы хотел сам определить, что для него будет сложением, а не городить всякие ->addWith(...). В ряде случаев нужно поэлементное сложение, в другом ряде нужно объединение — это гибкость.
Я понимаю, что "надёжность при командной разработке" требует убрать из языков и указатели, и перегрузки, и битовые операции. Но в итоге мы получили мир, в котором для запуска приложения-чата нужен 4-х ядерный комп с 8Гб ОЗУ :)
t_kanstantsin
так я и пишу, что оператор "+" уже занят
bolk
Уже довольно давно это совсем не очевидно:
Просто можно было делать только из расширений, а не из самого языка.