- PVSM.RU - https://www.pvsm.ru -
Вышли следующие версии PHP:
Обновления в основном посвящены устранению ошибок в реализации языка и в стандартной библиотеке. В том числе исправлено несколько ошибок, потенциально приводящих к утечке памяти.
Кроме того объявлено о доступности версии 8.2.0 Alpha 1 [3]. Подробнее обсудим это событие уже в следующем дайджесте. Кстати, если вы интересуетесь версией 8.2, не пропустите статью с, пожалуй, первым тестом производительности этой версии [4].
Выбраны те разработчики, чью работу над 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]
Прочтите, что они планируют сделать в ближайшем будущем.
Стандарт "PER Coding Style [8]", идущий на замену PSR-12, получил тег 1.0.0
Вышла очередная превью-версия популярной IDE PhpStorm 2022.1.2 [9].
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.
Предложение находится в фазе голосования, всё говорит о том, что оно будет принято.
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];
}
От автора дайджеста: давно уже не видел ничего более странного...
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]
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 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], содержащие в основном исправления найденных багов.
Советы на тему того, какие библиотеки использовать для улучшения качества кода в проектах на Symfony: https://dev.to/rezende79/the-4-basic-libraries-every-symfony-project-needs-to-improve-code-quality-3ejh [23] (впрочем, советы достаточно банальные)
Серия статей "Get started with Symfony 6 for beginners" от Azay Karimli: первая часть [24], вторая часть [25], третья часть [26]. Неплохое дополнение официальной документации.
Ваш покорный слуга провел семинар для начинающих "Symfony 6: Быстрый старт [27]", на котором пытался донести мысль о том, что Symfony - это простой и дружелюбный для новичков фреймворк.
Вышли версии:
Laravel 9.12 [28]
Laravel 9.13 [29]
Laravel 9.14 [30]
Состоялся релиз версии 1.0 проекта Bouncer [31] - универсальная система управления правами и разрешениями для Laravel.
Laravel Wallet [32]: простая, но функциональная реализация системы "лицевых счетов" для пользователей вашего проекта.
Руководство по решению проблемы "N+1 запросов" в Laravel (но пригодится и пользователям других фреймворков): https://laravel-news.com/laravel-n1-query-problems [33]
Неплохая статья о рефакторинге "толстых" контроллеров в Laravel: https://laravel-news.com/controller-refactor [34]
Интересная статья с обзором админ-панелей для Laravel: https://dev.to/forestadmin/the-guide-to-laravel-admin-panels-2g5j [35]
Каких-то революционных новостей касательно Yii не замечено, но радует то, что процесс разработки в целом идёт. Это видно по релизам отдельных пакетов, которые войдут в состав Yii 3:
Log 2.0 [36]
HTML 2.4 [37]
Console 1.1 [38]
Общий прогресс подготовки к релизу Yii 3 составляет на данный момент 60% [39]
Статьи Антона Титова о распределенных Workflow. Первая [40] и вторая [41] части.
Статья Альберта Степанцева об асинхронности, конкурентности, параллельности и многопоточности [42].
Короткая, но небезынтересная статья об автотестах в... битриксе [43].
Очередное руководство по настройке XDebug совместно с Docker [44].
Статья о работе с профайлером prodprofiler [45].
Никита Попов опубликовал статью "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
Нажмите здесь для печати.