Подборка свежих новостей и материалов из мира 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/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
- 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
- yiisoft/di — DI-контейнер совместимый с PSR-11 от команды Yii.
???? Статьи
- Строим эффективный сетевой обмен в 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-стека для карьеры
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест №216
Комментарии (11)
casnerano
14.12.2021 23:48+1Согласен в комментариями выше - функционал действительно не помешает, и есть ряд задач, для которые приемлемо выполнение арифметических выражений над объектами, работа с теми же множествами, длинная арифметика и прочее..
Что касается варианта реализации:
с одной стороны, хорошо бы придерживаться тех. же магических методов,
но с другой стороны:
1. будут сложности с неймингом операторов.
2. кол-во маг. методов будет сильно возрастет.
мне кажется, вариант с operator лучше.
MARDEN
15.12.2021 12:07Shardj/zf1-future — Ребятки поддерживают форк ZendFramework 1 совместимый с PHP 8.
Никак не закопают стюардессу :)
SamDark
15.12.2021 19:30+1Macroable из фреймворка 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
Уже довольно давно это совсем не очевидно:
Просто можно было делать только из расширений, а не из самого языка.