- PVSM.RU - https://www.pvsm.ru -

PHP-Дайджест № 222-4 (26 апреля – 31 мая 2022)

PHP

Вышли следующие версии PHP:

Обновления в основном посвящены устранению ошибок в реализации языка и в стандартной библиотеке. В том числе исправлено несколько ошибок, потенциально приводящих к утечке памяти.

Кроме того объявлено о доступности версии 8.2.0 Alpha 1 [3]. Подробнее обсудим это событие уже в следующем дайджесте. Кстати, если вы интересуетесь версией 8.2, не пропустите статью с, пожалуй, первым тестом производительности этой версии [4].

PHP Foundation

  • Выбраны те разработчики, чью работу над PHP будет спонсировать PHP Foundation. Ими стали: Derick Rethans, George Peter Banyard, Ilija Tovilo, Jakub Zelenka, Máté Kocsis, и Arnaud Le Blanc.

  • В реальном времени коммиты в ядро PHP можно видеть в основном репозитории на Гитхабе: https://github.com/php/php-src/commits/master [5], а за обсуждениями следить в листе рассылки: https://externals.io/ [6], который теперь открыт для всех.

  • Опубликовано интервью с разработчиками, которых спонсирует PHP Foundation: https://thephp.foundation/blog/2022/05/06/interview-with-core-developers/ [7]
    Прочтите, что они планируют сделать в ближайшем будущем.

PHP-FIG

Стандарт "PER Coding Style [8]", идущий на замену PSR-12, получил тег 1.0.0

PHPStorm

Вышла очередная превью-версия популярной IDE PhpStorm 2022.1.2 [9].

RFC

Expand deprecation notice scope for partially supported callables

https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices [10]

Краткое содержание:

  • В PHP есть тип callable

  • Он полон странных вещей. К примеру строка 'someClass::someMethod' является валидным значением типа callable (то есть пройдет контроль типа callable, к примеру в аргументе функции, а функция is_callable() вернет true), но при этом то же значение не может быть использовано как аргумент функции call_user_func()

  • Такие значения автор RFC называет "частично-поддерживаемыми callable" и предлагает объявить устаревшими в PHP 8.2 и полностью удалить в PHP 9.0.

Предложение находится в фазе голосования, всё говорит о том, что оно будет принято.

Fetch properties in const expressions

https://wiki.php.net/rfc/fetch_property_in_const_expressions [11]

Идея: а давайте, если значение какого-либо свойства объекта известно уже на этапе компиляции, дадим возможность использовать это свойство в константных выражениях?

Пример:

enum A: string {
    case A = 'A';
    case B = 'B';
    const CASES = [self::A->value => self::A, self::B->value => self::B];
}

От автора дайджеста: давно уже не видел ничего более странного...

Short Closures 2.0

https://wiki.php.net/rfc/auto-capture-closure [12]

И снова седая ночь Nuno Maduro предлагает добавить в PHP еще один синтаксис для функций.

Помимо обычных глобальных функций, глобальных рантаймовых функций, анонимных функций и стрелочных функций, автор желает видеть еще и многострочные стрелочные функции:

$repository = ... ;
$guestIds = ... ;

$guests = array_filter($users, fn ($user) {
    $guest = $repository->findByUserId($user->id);
    return $guest !== null && in_array($guest->id, $guestsIds);
});

Помимо многострочности автор также предлагает добавить к стрелочным функциям конструкцию замыкания use, не приводя, впрочем, достаточно внятных аргументов - для чего? Ведь стрелочные функции по определению замыкают весь контекст своего создания? Видимо, чтобы было.

Предложение находится в обсуждении: https://externals.io/message/117888 [13]

Body-less methods

https://github.com/php/php-src/issues/8420 [14]

Предлагается дать возможность программисту не обозначать пустое тело функции (метода) фигурными скобками в тех случаях, когда внутри этих скобок ничего нет:

class Point {
    public function __construct(
        public float $x = 0.0,
        public float $y = 0.0,
        public float $z = 0.0,
    );
}

Или, к примеру:

class Foo {
    public static function bar(int $baz): void;
}

Идет обсуждение предложения: https://externals.io/message/117771 [15]

Прочее

В ответ на отклонение RFC с перегрузкой операторов [16] Jordan LeDoux написал открытое письмо о будущем объектов и операторов в PHP: https://externals.io/message/117678 [17], в котором желающие приглашаются принять участие в дискуссии на тему "Какие всё-таки операторы должны быть определены на множестве объектов и каким образом?".

Новости фреймворков

Symfony

Новости

Главная новость это, безусловно, выход версии фреймворка Symfony 6.1 [18].

Полный список нововведений слишком велик, версия получилась достаточно объемная по новым фичам, поэтому оставлю лишь ссылку: https://symfony.com/blog/symfony-6-1-0-beta1-released [19]

Помимо того, вышли версии Symfony 6.0.9 [20], Symfony 5.4.9 [21], и даже Symfony 4.4.42 [22], содержащие в основном исправления найденных багов.

Что почитать и посмотреть?

Laravel

Новости

Вышли версии:

Библиотеки, компоненты, пакеты

  • Состоялся релиз версии 1.0 проекта Bouncer [31] - универсальная система управления правами и разрешениями для Laravel.

  • Laravel Wallet [32]: простая, но функциональная реализация системы "лицевых счетов" для пользователей вашего проекта.

Что почитать?

Yii

Каких-то революционных новостей касательно Yii не замечено, но радует то, что процесс разработки в целом идёт. Это видно по релизам отдельных пакетов, которые войдут в состав Yii 3:

Общий прогресс подготовки к релизу Yii 3 составляет на данный момент 60% [39]

Что почитать на Хабре?

Новости одной строкой

Никита Попов опубликовал статью "The opcache optimizer [46]", где подробно разбирает вопрос работы оптимизатора опкэша, ставшего с версии 8.1 частью ядра.

Роман Пронский, который ранее вёл этот дайджест, выпустил свою версию обзора значимых событий в мире PHP за май: "PHP Annotated - May 2022 [47]".

Вышла содержательная статья "Message Processing in PHP — Symfony Messenger, Laravel Queues and Ecotone [48]", сравнивающая различные реализации систем обмена сообщениями в популярных фреймворках.

Дмитрий Елисеев опубликовал исходный код проекта своего сайта с полной автоматизацией и использованием Docker [49]

Вместо заключения

Подготовлено при активном участии сообщества телеграм-чата "PHP Russian Talks" [50].

Замечания по текущему выпуску и предложения для следующего можете отправлять автору в личку или в указанный выше чат.

Автор: Альберт Степанцев

Источник [51]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/375988

Ссылки в тексте:

[1] PHP 8.1.6: https://www.php.net/ChangeLog-8.php#8.1.6

[2] PHP 8.0.9: https://www.php.net/ChangeLog-8.php#8.0.19

[3] 8.2.0 Alpha 1: https://www.php.net/archive/2022.php#2022-06-09-3

[4] статью с, пожалуй, первым тестом производительности этой версии: https://www.phoronix.com/scan.php?page=news_item&px=Early-PHP-8.2-Benchmarks-Half

[5] https://github.com/php/php-src/commits/master: https://github.com/php/php-src/commits/master

[6] https://externals.io/: https://externals.io/

[7] https://thephp.foundation/blog/2022/05/06/interview-with-core-developers/: https://thephp.foundation/blog/2022/05/06/interview-with-core-developers/

[8] PER Coding Style: https://github.com/php-fig/per-coding-style

[9] превью-версия популярной IDE PhpStorm 2022.1.2: https://blog.jetbrains.com/phpstorm/2022/05/phpstorm-2022-1-2-preview/

[10] https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices: https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices

[11] https://wiki.php.net/rfc/fetch_property_in_const_expressions: https://wiki.php.net/rfc/fetch_property_in_const_expressions

[12] https://wiki.php.net/rfc/auto-capture-closure: https://wiki.php.net/rfc/auto-capture-closure

[13] https://externals.io/message/117888: https://externals.io/message/117888

[14] https://github.com/php/php-src/issues/8420: https://github.com/php/php-src/issues/8420

[15] https://externals.io/message/117771: https://externals.io/message/117771

[16] RFC с перегрузкой операторов: https://wiki.php.net/rfc/user_defined_operator_overloads

[17] https://externals.io/message/117678: https://externals.io/message/117678

[18] версии фреймворка Symfony 6.1: https://symfony.com/blog/symfony-6-1-0-released

[19] https://symfony.com/blog/symfony-6-1-0-beta1-released: https://symfony.com/blog/symfony-6-1-0-beta1-released

[20] Symfony 6.0.9: https://symfony.com/blog/symfony-6-0-9-released

[21] Symfony 5.4.9: https://symfony.com/blog/symfony-5-4-9-released

[22] Symfony 4.4.42: https://symfony.com/blog/symfony-4-4-42-released

[23] https://dev.to/rezende79/the-4-basic-libraries-every-symfony-project-needs-to-improve-code-quality-3ejh: https://dev.to/rezende79/the-4-basic-libraries-every-symfony-project-needs-to-improve-code-quality-3ejh

[24] первая часть: https://azaykarimli.medium.com/get-started-with-symfony-6-for-beginners-b0c8df85a9f5

[25] вторая часть: https://azaykarimli.medium.com/get-started-with-symfony-6-for-beginners-part-2-rout-controller-rendering-b95b731dbb35

[26] третья часть: https://azaykarimli.medium.com/get-started-with-symfony-6-for-beginners-part-3-database-doctrine-orm-entity-b423ae0313a0

[27] Symfony 6: Быстрый старт: https://pr-of-it.ru/webinars/111.html

[28] Laravel 9.12: https://laravel-news.com/laravel-9-12-0

[29] Laravel 9.13: https://laravel-news.com/laravel-9-13-0

[30] Laravel 9.14: https://laravel-news.com/laravel-9-14-0

[31] версии 1.0 проекта Bouncer: https://laravel-news.com/bouncer-v1

[32] Laravel Wallet: https://laravel-news.com/laravel-wallet

[33] https://laravel-news.com/laravel-n1-query-problems: https://laravel-news.com/laravel-n1-query-problems

[34] https://laravel-news.com/controller-refactor: https://laravel-news.com/controller-refactor

[35] https://dev.to/forestadmin/the-guide-to-laravel-admin-panels-2g5j: https://dev.to/forestadmin/the-guide-to-laravel-admin-panels-2g5j

[36] Log 2.0: https://github.com/yiisoft/log/releases/tag/2.0.0

[37] HTML 2.4: https://www.yiiframework.com/news/457/yii-html-2-4-0

[38] Console 1.1: https://www.yiiframework.com/news/456/yii-console-1-1-0

[39] составляет на данный момент 60%: https://www.yiiframework.com/yii3-progress

[40] Первая: https://habr.com/ru/company/oleg-bunin/blog/666154/

[41] вторая: https://habr.com/ru/company/oleg-bunin/blog/666158/

[42] асинхронности, конкурентности, параллельности и многопоточности: https://habr.com/ru/post/667590/

[43] автотестах в... битриксе: https://habr.com/ru/post/667160/

[44] XDebug совместно с Docker: https://habr.com/ru/post/665860/

[45] профайлером prodprofiler: https://habr.com/ru/post/662349/

[46] The opcache optimizer: https://www.npopov.com/2022/05/22/The-opcache-optimizer.html

[47] PHP Annotated - May 2022: https://blog.jetbrains.com/phpstorm/2022/05/php-annotated-may-2022/

[48] Message Processing in PHP — Symfony Messenger, Laravel Queues and Ecotone: https://blog.devgenius.io/message-processing-in-php-symfony-messenger-laravel-queues-and-ecotone-8ca17102c5b2

[49] проекта своего сайта с полной автоматизацией и использованием Docker: https://elisdn.ru/blog/152/source-code

[50] "PHP Russian Talks": https://t.me/php_russian_talks

[51] Источник: https://habr.com/ru/post/671074/?utm_source=habrahabr&utm_medium=rss&utm_campaign=671074