PHP Digest
8.58K subscribers
60 photos
3 videos
283 links
PHP Дайджест

Новости, материалы и инструменты из мира PHP — раз в месяц.

Вопросы, замечания, предложения: @pronskiy
Download Telegram
Видео PHP-митапа из Казани

https://www.youtube.com/watch?v=8Cfz_39fbfU

Трансляция закончилась, вот ссылки на доклады с таймкодами:

04:12 Превращаем PHP-скрипты в статические бинарники — Искандер Шарипов, ВКонтакте
58:59 Как писать тесты, чтобы больше радоваться — Иван Филатов, Skyeng
2:35:51 ООП и трейты, чтоб их — Адель Файзрахманов, Laravel Idea
3:34:35 Внедряем DevOps без Docker и Kubernetes — Сергей Шамбир, iSpring
4:30:04 Как микросервисы на Go рождаются из PHP-монолита — Егор Пересада, FindMyKids
PHP Дайджест № 203 (1 – 17 мая 2021)

Аксессоры свойств, пересечения типов и финальные константы официально предложены для PHP 8.1, и еще два RFC уже приняты. Также в выпуске порция инструментов, видео, подкасты, статьи, новости сообщества.

https://habr.com/ru/post/557828/
PHP Дайджест № 204 (17 – 31 мая 2021)

В эти две недели core команда PHP активно обсуждала предложение по Partial function Application и в качестве альтернативы Никита Попов предложил более простой синтаксис для получения ссылки на любые функции. Также в уже принятые в PHP 8.1 енумы предлагается добавить статические свойства.

Symfony 6 будет требовать PHP 8.0, а вышедшая Doctrine 2.9 поддерживает указание метаданных в атрибутах вместо PHPDoc.

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

https://habr.com/ru/post/560158/
PHP Дайджест № 205 (1 – 15 июня 2021)

Первая альфа PHP 8.1.0, Composer 2.1, Symfony 5.3 и другие релизы. Обзор новых предложений для PHP 8.1: Partial Function Application, pipe оператор, readonly свойства. А также порция полезных инструментов, статьи, видео и подкасты.

https://habr.com/ru/post/562718/
PHP Дайджест № 207 (29 июня – 12 июля 2021)

• Третья альфа PHP 8.1 — список новых возможностей и статус последних предложений;

• readonly-свойства — Nikolas Grekas и другие голосуют против из-за проблем с клонированием;

• автор Psalm-покинул проект и PHP — работу подхватили другие мейнтейнеры;

• в ReactPHP добавили дефолтный ивент-луп;

• Laravel 9 выйдет в январе и будет требовать PHP 8.0.

А также другие новости, порция полезных инструментов, статьи и видео.

https://habr.com/ru/post/567228/
В PHP 8.1 будет оператор new в инициализаторах

https://wiki.php.net/rfc/new_in_initializers

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

А вот со свойствами — нет. Вернее, можно будет использовать через constructor property promotion. Но это в действительности аргументы параметров, а не дефолтные значения свойств. Смотрите сами: 3v4l.org/r9iv4

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

Зато этот RFC фактически добавляет поддержку вложенных атрибутов.
В PHP 8.1 будут readonly свойства

https://wiki.php.net/rfc/readonly_properties_v2

Такие свойства нельзя изменить после инициализации.

Инициализировать можно только в том же скоупе, то есть в объявлении или в методе класса (можно обойти через Reflection или старый трюк с Closure::bind).

Свойства с флагом readonly должны быть типизированные, но можно использовать тип mixed.

Если readonly свойство инициализировано объектом, то иммутабельным он не становится. То есть его внутреннее состояние все еще можно изменить.
В PHP 8.1 можно будет получить ссылку на любую функцию

https://wiki.php.net/rfc/first_class_callable_syntax

Последнее из улучшений синтаксиса в PHP 8.1 принято единогласно.

Было так:
$fn = Closure::fromCallable('strlen');

Или так:
$fn = fn(...$args) => strlen(...$args);

Стало:
$fn = strlen(...);

Новый синтаксис можно будет применять везде, где ожидается callable. Он лаконичнее и доступен для статического анализа.
PHP Дайджест № 208 (12 – 26 июля 2021)

Первая бета PHP 8.1 — будут readonly-свойства, first-class callable, и new в инициализаторах кроме свойств и констант класса. Nikolas Grekas предложил сделать пересечения типов nullable. А также другие новости, порция полезных инструментов, статьи и видео.

https://habr.com/ru/post/569626/
Вышел PhpStorm 2021.2

В этом релизе сильно продвинулись с поддержкой дженериков и начали выкатывать поддержку PHP 8.1. Также исправили все проблемы с форматированием и улучшили рефакторинг Extract method.

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

https://habr.com/ru/company/JetBrains/blog/571962/
PHP Дайджест № 209 (1 – 16 августа 2021)

Вторая бета PHP 8.1 и много материалов об этой версии, два свежих RFC для PHP 8.2, ReactPHP и Amphp объединяют усилия над базой для асинхронного PHP. А также другие новости и релизы, порция полезных инструментов, статьи и видео.

https://habr.com/ru/post/573184/
PHP Дайджест № 210 (16 – 30 августа 2021)

Вышла третья бета PHP 8.1, Swiftmailer больше не будет поддерживаться, PHP-FIG обсуждает обновляемые стандарты PER. Для PHP 8.2 предложены два новых RFC: про удаление динамических свойств и перегрузку операторов. Также в выпуске порция полезных инструментов, статьи и видео.

https://habr.com/ru/post/575354/
PHP Дайджест № 211 (1 – 13 сентября 2021)

Вышел первый релиз-кандидат PHP 8.1, в Packagist обнаружено два зловредных пакета, а репозиторий популярного пакета AliceBundle пропал с GitHub.

Для PHP 8.2 предложены два новых RFC: про $this в качестве тайпхинта для возвращаемых значений, и про удаление старых видов колбэков.

Как всегда, в выпуске порция полезных инструментов, статьи и видео.

https://habr.com/ru/post/577660/
PHP Дайджест № 212 (13 – 27 сентября 2021)

Вышел PHP 8.1 RC2 и уже доступен первый пакет с использованием перечислений, будет сделан форк Magento, новый тип стандартов PER в дополнение к PSR, стартовал PhpStorm 2021.3 EAP, Symfony 6 будет полностью типизирован — как обновляться?

Для PHP 8.2 предложены новые оптимизированные структуры данных.

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

https://habr.com/ru/post/580210/
PHP Дайджест № 213 (27 сентября – 11 октября 2021)

Для PHP 8.2 предложили добавить тип null; опубликована уязвимость в PHP с disable_functions, которая на самом деле не уязвимость; новый сайт от сообщества — phpopendocs.com; PHP 8.1 RC 3, Xdebug 3.1 и другие релизы.

Также в выпуске порция инструментов, полезные статьи, видео.

https://habr.com/ru/post/582776/
PHP Дайджест № 214 (11 – 25 октября 2021)

Конфликт вокруг расширения Swoole и создание форка OpenSwoole; асинхронные фреймворки Amp и ReactPHP выпустили общую реализацию ивент-лупа; PHP 8.1 RC 4; принят первый RFC для 8.2.
Также в выпуске два поста от Никиты Попова, полезные статьи, видео.

https://habr.com/ru/post/585326/
PHP Дайджест № 215 (1 – 15 ноября 2021)

Вышел последний релиз кандидат PHP 8.1 перед финальным релизом; доступны бенчмарки PHP 8.1; в PHP 8.2 планируется задепрекейтить динамические свойства — добро или зло?; про перенос багов с bugs.php.net на GitHub; немного обновлен PSR-16.
Также в выпуске полезные статьи, видео и другие новости сообщества

https://habr.com/ru/post/589229/
PHP Дайджест № 215 (1 – 15 ноября 2021)

Вместе с Insolita пробуем новый формат дайджеста в телеграме. Напишите в комментариях как вам?


⚡️НОВОСТИ

🔹
PHP 8.1.0 RC 6
Вышел последний релиз кандидат, а значит PHP 8.1 выйдет уже меньше, чем через две недели.

▪️ Интересный обзор новых фич PHP 8.1 сделал Mohamed Said (Core Laravel): 📺 Getting Ready for PHP 8.1
▪️ Brent Roose: PHP 8.1 в 8 блоках кода

Кроме прочего, в PHP 8.1 сделано много улучшений по производительности. Судя по результатам свежих бенчмарков от одного из core PHP разработчиков, Symfony demo приложение работает на ~30% быстрее, чем на PHP 8.0.

🔹 [RFC] Migrating to Github Issues
Предлагается перенести баги со старой системы bugs.php.net на GitHub в репозиторий php/php-src. Это касается всех багов, кроме секьюрити-проблем, которые не должны быть публичными.

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

🔹 [RFC] Deprecate dynamic properties
На голосовании RFC с предложением задепрекейтить и впоследствии убрать динамические (необъявленные) свойства.

class User {
public $name;
}

$user = new User;

// Assigns declared property User::$name.
$user->name = «foo»;

// Oops, a typo:
$user->nane = «foo»;

// PHP <= 8.1: Молча создает динамическое свойство $user->nane.
// PHP 8.2: Вызывает предупреждение, но все равно создает динамическое свойство.
// PHP 9.0: Выбрасывает исключение Error.

Это изменение не будет касаться класса stdClass и унаследованных от него. А также не касается классов с магическими __get/__set.

Кроме того, в последней версии RFC добавлен еще атрибут #[AllowDynamicProperties]. Его можно навесить на любой класс и в этом классе продолжат работать динамические свойства.

Предложение вызвало волну споров в твиттере. Вот пример треда с недовольными таким подходом. Это изменение обратной совместимости и потребуется обновлять много кода, да и вообще ломает динамическую сущность PHP — говорят они.


🔹 Обновлен PSR-16: Common Interface for Caching Libraries

Для пакета php-fig/simple-cache выпущены две новые версии. В 2.0.0 добавлены типы для аргументов, а в 3.0.0 — типы возвращаемых значений.

🔹 Локальная root-уязвимость в PHP-FPM

Уязвимость позволяет пользователю с низкими привилегиями (например, www-data) повысить свои привилегии до уровня root, используя ошибку в PHP-FPM. Хоть это серьезная проблема, но не RCE. То есть злоумышленнику сначала надо будет использовать другие техники, чтоб завладеть рабочим процессом PHP. По ссылке подробный разбор от исследователей.

Уязвимость исправлена в поддерживаемых ветках PHP 7.4.25 и PHP 8.0.12 и PHP 7.3.32.

🔸 PHPStan 1.0 — После шести лет разработки состоялся первый стабильный релиз статического анализатора. В релизе новый уровень проверки «9» и другие улучшения.
Есть свежее интервью с автором 📺 PHPStan: PHP Release Radar — Episode 13


📝 СТАТЬИ

🔸 Как ManyChat на PHP8 переезжал

🔸 Перевод аудио-сообщений в текст в telegram при помощи Wit

🔸 Сравнение php-fpm, nginx-unit и laravel-octane

🔸 Эволюция PHP-объектов

🔸 Современное шифрование в PHP с помощью библиотеки libsodium

🔸 Type variance in PHP — Никита Попов об особенностях системы типов в PHP.

🔸 Интересный трюк от Larry Garfield с ридонли свойствами в PHP 8.1.

—————

👉 В полном дайджесте на Хабре более подробно про эти новости, а также ссылки по фреймворкам.