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, содержащие в основном исправления найденных багов.

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

Laravel

Новости

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

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

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

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

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

Yii

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

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

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

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

Никита Попов опубликовал статью "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)


  1. eshimischi
    13.06.2022 14:39

    PHP 8 и 8.1 уже успел получить минорные обновления


  1. arokettu
    13.06.2022 16:32

    Поправьте этот блок пожалуйста, у вас там не так примерно всё:

    Expand deprecation notice scope for partially supported callables

    1. "someclass::somemethod" легальный ситаксис и им остается, частично поддерживаемые это например "parent::method" или "static::method"

    2. partially supported работают в виде call_user_func($f), они не работают в виде прямого вызова $f()

    3. их уже задепрекейтили в совсем другом RFC: https://wiki.php.net/rfc/deprecate_partially_supported_callables (если вы обозреваете их оба, поставьте обе ссылки, я не помню, было это у вас уже или нет)

    4. в конкретно этом RFC предлагают расширить кидание E_DEPRECATED на вызовы is_callable() и передачу в функцию с хинтом callable


    1. AlexLeonov Автор
      13.06.2022 17:38
      +1

      Спасибо.


  1. SerafimArts
    14.06.2022 12:56

    del


  1. roxblnfk
    15.06.2022 12:01
    +1

    Спасибо за дайджест.

    Body-less methods

    https://github.com/php/php-src/issues/8420

    RFC-карму пока не дали, поэтому RFC скорее всего не успеется к PHP 8.2 (вот-вот будет фиче-фриз). Однако, если вам хочется или не хочется, чтобы такой RFC был принят - перейдите, пожалуйста, по ссылке и поставьте соответствующую эмоджу. Это поможет понять общую заинтересованность разработчиков в предлагаемом изменении.

    Кроме того, вы можете объективно выразить свою позицию в issue. Это может помочь дополнить RFC.