PHP
Вышли следующие версии PHP:
Обновления в основном посвящены устранению ошибок в реализации языка и в стандартной библиотеке. В том числе исправлено несколько ошибок, потенциально приводящих к утечке памяти.
Кроме того объявлено о доступности версии 8.2.0 Alpha 1. Подробнее обсудим это событие уже в следующем дайджесте. Кстати, если вы интересуетесь версией 8.2, не пропустите статью с, пожалуй, первым тестом производительности этой версии.
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, а за обсуждениями следить в листе рассылки: https://externals.io/, который теперь открыт для всех.
Опубликовано интервью с разработчиками, которых спонсирует PHP Foundation: https://thephp.foundation/blog/2022/05/06/interview-with-core-developers/
Прочтите, что они планируют сделать в ближайшем будущем.
PHP-FIG
Стандарт "PER Coding Style", идущий на замену PSR-12, получил тег 1.0.0
PHPStorm
Вышла очередная превью-версия популярной IDE PhpStorm 2022.1.2.
RFC
Expand deprecation notice scope for partially supported callables
https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices
см. также предыдущий, уже принятый RFC: https://wiki.php.net/rfc/deprecate_partially_supported_callables
Краткое содержание:
В PHP есть тип callable
Он полон странных вещей. К примеру строка
$f = 'parent::method'
является валидным значением типа callable: пройдет контроль типа callable, к примеру в аргументе функции, а функция is_callable() вернет true, но при этом то же значение не может быть использовано, как callable напрямую, в виде$f()
однако может быть вызвано, но как аргумент функции call_user_func()Такие значения автор RFC называет "частично-поддерживаемыми callable" и предлагает сделать так, чтобы тайп-хинт
callable
и вызовis_callable()
выдавали ошибку уровня E_DEPRECATED в PHP 8.2 (а в будущем - вообще прекратить поддержку таких конструкций)
Предложение находится в фазе голосования, всё говорит о том, что оно будет принято.
Fetch properties in const expressions
https://wiki.php.net/rfc/fetch_property_in_const_expressions
Идея: а давайте, если значение какого-либо свойства объекта известно уже на этапе компиляции, дадим возможность использовать это свойство в константных выражениях?
Пример:
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
И снова седая ночь 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
Body-less methods
https://github.com/php/php-src/issues/8420
Предлагается дать возможность программисту не обозначать пустое тело функции (метода) фигурными скобками в тех случаях, когда внутри этих скобок ничего нет:
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
Прочее
В ответ на отклонение RFC с перегрузкой операторов Jordan LeDoux написал открытое письмо о будущем объектов и операторов в PHP: https://externals.io/message/117678, в котором желающие приглашаются принять участие в дискуссии на тему "Какие всё-таки операторы должны быть определены на множестве объектов и каким образом?".
Новости фреймворков
Symfony
Новости
Главная новость это, безусловно, выход версии фреймворка Symfony 6.1.
Полный список нововведений слишком велик, версия получилась достаточно объемная по новым фичам, поэтому оставлю лишь ссылку: https://symfony.com/blog/symfony-6-1-0-beta1-released
Помимо того, вышли версии Symfony 6.0.9, Symfony 5.4.9, и даже Symfony 4.4.42, содержащие в основном исправления найденных багов.
Что почитать и посмотреть?
Советы на тему того, какие библиотеки использовать для улучшения качества кода в проектах на Symfony: https://dev.to/rezende79/the-4-basic-libraries-every-symfony-project-needs-to-improve-code-quality-3ejh (впрочем, советы достаточно банальные)
Серия статей "Get started with Symfony 6 for beginners" от Azay Karimli: первая часть, вторая часть, третья часть. Неплохое дополнение официальной документации.
Ваш покорный слуга провел семинар для начинающих "Symfony 6: Быстрый старт", на котором пытался донести мысль о том, что Symfony - это простой и дружелюбный для новичков фреймворк.
Laravel
Новости
Вышли версии:
Библиотеки, компоненты, пакеты
Состоялся релиз версии 1.0 проекта Bouncer - универсальная система управления правами и разрешениями для Laravel.
Laravel Wallet: простая, но функциональная реализация системы "лицевых счетов" для пользователей вашего проекта.
Что почитать?
Руководство по решению проблемы "N+1 запросов" в Laravel (но пригодится и пользователям других фреймворков): https://laravel-news.com/laravel-n1-query-problems
Неплохая статья о рефакторинге "толстых" контроллеров в Laravel: https://laravel-news.com/controller-refactor
Интересная статья с обзором админ-панелей для Laravel: https://dev.to/forestadmin/the-guide-to-laravel-admin-panels-2g5j
Yii
Каких-то революционных новостей касательно Yii не замечено, но радует то, что процесс разработки в целом идёт. Это видно по релизам отдельных пакетов, которые войдут в состав Yii 3:
Общий прогресс подготовки к релизу Yii 3 составляет на данный момент 60%
Что почитать на Хабре?
Статьи Антона Титова о распределенных Workflow. Первая и вторая части.
Статья Альберта Степанцева об асинхронности, конкурентности, параллельности и многопоточности.
Короткая, но небезынтересная статья об автотестах в... битриксе.
Очередное руководство по настройке XDebug совместно с Docker.
Статья о работе с профайлером prodprofiler.
Новости одной строкой
Никита Попов опубликовал статью "The opcache optimizer", где подробно разбирает вопрос работы оптимизатора опкэша, ставшего с версии 8.1 частью ядра.
Роман Пронский, который ранее вёл этот дайджест, выпустил свою версию обзора значимых событий в мире PHP за май: "PHP Annotated - May 2022".
Вышла содержательная статья "Message Processing in PHP — Symfony Messenger, Laravel Queues and Ecotone", сравнивающая различные реализации систем обмена сообщениями в популярных фреймворках.
Дмитрий Елисеев опубликовал исходный код проекта своего сайта с полной автоматизацией и использованием Docker
Вместо заключения
Подготовлено при активном участии сообщества телеграм-чата "PHP Russian Talks".
Замечания по текущему выпуску и предложения для следующего можете отправлять автору в личку или в указанный выше чат.
Комментарии (5)
arokettu
13.06.2022 16:32Поправьте этот блок пожалуйста, у вас там не так примерно всё:
Expand deprecation notice scope for partially supported callables
"someclass::somemethod"
легальный ситаксис и им остается, частично поддерживаемые это например"parent::method"
или"static::method"
partially supported работают в виде
call_user_func($f)
, они не работают в виде прямого вызова$f()
их уже задепрекейтили в совсем другом RFC: https://wiki.php.net/rfc/deprecate_partially_supported_callables (если вы обозреваете их оба, поставьте обе ссылки, я не помню, было это у вас уже или нет)
в конкретно этом RFC предлагают расширить кидание E_DEPRECATED на вызовы
is_callable()
и передачу в функцию с хинтомcallable
roxblnfk
15.06.2022 12:01+1Спасибо за дайджест.
Body-less methods
RFC-карму пока не дали, поэтому RFC скорее всего не успеется к PHP 8.2 (вот-вот будет фиче-фриз). Однако, если вам хочется или не хочется, чтобы такой RFC был принят - перейдите, пожалуйста, по ссылке и поставьте соответствующую эмоджу. Это поможет понять общую заинтересованность разработчиков в предлагаемом изменении.
Кроме того, вы можете объективно выразить свою позицию в issue. Это может помочь дополнить RFC.
eshimischi
PHP 8 и 8.1 уже успел получить минорные обновления