PHP Дайджест № 205 (1 – 15 июня 2021)

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


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

Приятного чтения!

Новости


  • PHP 8.1.0 alpha 1


    Вышел первая альфа и тем самым стартовал рели-процесс PHP 8.1. Обновления будут выходить каждые две недели по расписанию. Финальный релиз запланирован на 25 ноября.

    Заморозка фич ожидается 20 июля, а значит еще могут быть изменения. Из наиболее заметных новых фич на данный момент есть:

    • Enum они же перечисления RFC;
    • Новый тип never для возвращаемых значений RFC;
    • Файберы RFC;
    • Финальные константы в классах RFC;
    • Оператор распаковки поддерживает массивы со строковыми ключами RFC;
    • Объявлено устаревшим преобразование float в int, где теряется дробная часть RFC;
    • Интерфейс Serializable объявлен устаревшим RFC;
    • Запись восьмеричных чисел с префиксом 0o RFC;
    • Ограничено использование $GLOBALS RFC;

    Полный список изменений можно посмотреть на php.watch/versions/8.1.

  • PHP 8.0.7, PHP 7.4.20


    Багфикс релизы актуальных веток.

  • Стартовала программа раннего доступа PhpStorm 2021.2


    Каждую неделю публикуем новые билды, которые можно использовать бесплатно. А также анонсируем то, над чем идет работа в релизе.
    Уже доступны: поддержка енамов PHP 8.1, переработанный и улучшенный рефакторинг Extract Method, исправлены ошибки форматирования.

  • Composer 2.1.0


    Добавлена команда reinstall, которая удаляет и устанавливает перечисленные зависимости заново. Также пачка других улучшений и фиксов.

  • У каждого пакета на packagist.org теперь есть статистика по PHP-версиям


    Один из авторов Composer, Jordi Boggiano, каждые полгода публиковал в блоге пост со статистикой используемых версий PHP.

    Теперь вместо блога, эта общая статистика всегда доступна на packagist.org/php-statistics.

    Кроме того, у каждого пакета есть своя подобная страница, например, symfony/console/php-stats.

  • PHP Russia 2021


    Конференция состоится уже 28 июня. Программа сформирована — habr ничего лишнего, только хардкор, только технологии.

    Для читателей дайджеста есть промокод со скидкой: php_digest.


PHP Internals


  • [RFC] Partial Function Application


    Предложение было существенно переработано и объединено с более узким RFC от Никиты First-class callable syntax.

    Задача — получать ссылку на любую функцию или метод. При этом с помощью ... можно заменить любое число аргументов, а с помощью плейсхолдера ? — ровно один.

    Итого предлагается три способа получить ссылку на функцию:
    1. $func = some_func(...) — так можно получить ссылку на любую функцию. Собственно, предложение Никиты.
    2. $func = some_func(1, 2, ?, 5) — так можно получить ссылку с одним аргументом, что может быть полезно для различных колбэков.
    3. $func = any_func($all, $params, ...) — так можно передать все аргументы в функцию, но при этом не вызывать ее. Ссылку позже можно вызвать, не передавая никаких параметров.

  • [RFC] Pipe Operator v2


    Если предложение выше пройдет голосование, то пайп-оператор станет его логичным продолжением.

    Вместо вложенных вызовов типа:

    array_filter(array_map('strtoupper', str_split(htmlentities("Hello World"))), fn($v) => $v != 'O');
    

    можно будет писать более понятные цепочки вида:

    $result = "Hello World"
        |> htmlentities(?)
        |> str_split(?)
        |> array_map(strtoupper(?), ?)
        |> array_filter(?, fn($v) => $v != 'O');
    

  • [RFC] Pure intersection types


    Предложение добавить пересечения типов находится на голосовании и похоже, что преодолеет необходимый порог. Тем временем можно послушать подкаст audio PHP Internals News #88 с George Peter Banyard, автором RFC.

  • [RFC] Readonly properties 2.0


    В качестве альтернативы довольно сложному и громоздкому предложению по акссессорам свойств сам же Никита выдвинул на рассмотрение RFC по readonly свойствам.

    Предлагается добавить модификатор readonly для свойств. Такие свойства нельзя будет изменить после инициализации.

    Скрытый текст
    class Test {
        public readonly string $prop;
    
        public function __construct(string $prop) {
            // Legal initialization.
            $this->prop = $prop;
        }
    }
    
    $test = new Test("foobar");
    // Legal read.
    var_dump($test->prop); // string(6) "foobar"
    
    // Illegal reassignment. It does not matter that the assigned value is the same.
    $test->prop = "foobar";
    // Error: Cannot modify readonly property Test::$prop
    


    А в комбинации с constructor property promotion из PHP 8.0, можно будет сократить вообще до вот такого:

    class User {
        public function __construct(
            public readonly string $name
        ) {}
    }
    
    $user = new User('Roman');
    echo $user->name; // Ok
    $user->name = 'Nikita'; // Error
    

  • [RFC] Make reflection setAccessible() no-op


    Сейчас чтобы получить доступ к свойству или методу через рефлексию, надо обязательно предварительно вызвать ->setAccessible(true).

    Marco «Ocramius» Pivetta предлагает убрать этот вызов, то есть ReflectionProperty и ReflectionMethod будут вести себя так, как если бы уже был вызван setAccessible(true).

    class Foo { private $bar = 'a'; }
    
    (new ReflectionProperty(Foo::class, 'bar'))->getValue();
    



Инструменты


  • nunomaduro/php-interminal — Инструмент для чтения PHP Internals обсуждений в терминале. Пока умеет выводить только последние сообщения, но выглядит красиво.
  • joonlabs/php-graphql — PHP-реализация спецификаций GraphQL. Автор утверждает, что быстрее чем другие реализации.
  • spiral/attributes — Позволяет читать атрибуты из PHP 8 на PHP 7.2+ и дополнительно может работать с аннотациями доктрины. Фреймворк-агностик и для работы требует лишь nikic/php-parser. Прислал SerafimArts.
  • spiral/storage — Компонент для работы с распределёнными файловыми хранилищами. Работает поверх thephpleague/flysystem и предоставляет более удобный API. Прислал SerafimArts.
  • kalessil/production-dependencies-guar — Предотвращает добавление дев-пакетов в секцию require в composer.json.

    В тему у Валентина Удальцова на канале «Пых» была заметка с идеями проверок на CI.


Symfony


  • Релизнут Symfony 5.3 — Что нового можно посмотреть на сайте Symfony. Также есть выпуск video PHP Release Radar #11: Symfony 5.3, где Nicolas Grekas рассказывает про релиз.
  • habr Symfony Messenger: объединение сообщений в пакеты.
  • habr Развертывание приложения Symfony в AWS Lambda.
  • Неделя Symfony #754 (7-13 июня 2021).


Laravel


  • Laravel исполнилось 10 лет — Забавно посмотреть на код первого релиза.
  • dollar Event Sourcing для Laravel — Платный курс от ребяток из Spatie. video Стрим с обзором курса.
  • ru Паттерн «Двойная диспетчеризация».
  • ru Пагинация: Offset против Cursor.
  • video Пара видео от Mohamed Said, участник core-команды Laravel: Database Connections in Laravel — Beyond the Basics, What's New in Laravel (#2).
  • Larastreamers.com — Календарь стримов от ларавельщиков.


Yii


  • Релизнут Yii 1.1.24 и продлена секьюрити поддержка Yii 1 — Первая версия фреймворка будет получать фиксы совместимости и секьюрити патчи до конца 2023 года.
  • yiisoft/rate-limiter — Новый компонент из Yii 3.


Статьи


  • Бенчмарк PHP роутеров с интересными деталями: nikic/FastRoute против symfony/routing.
  • Почему в PHP нужны короткие многострочные замыкания — В тему голосования по RFC Short Closures.
  • Как оптимизировать ORDER BY RANDOM().
  • habr Зачем нужен static при объявлении анонимных функций? — Отличная заметка от автора телеграм-канала Beer::PHP.
  • habr Как в PHP улучшить читаемость регулярных выражений.
  • habr Кто, где, когда: система компонентов для разделения зон ответственности команды.
  • habr Модульный PHP монолит: рецепт приготовления.


Аудио/Видео


  • audio PHP Internals News #87 — C Никитой Поповым про отмену тиков.
  • video PHPTownhall Episode 81: The Book of Psalm — Выпуск подкаста с Matthew Brown, автором псалма.
  • Регулярные стримы дайджеста пока на каникулах, зато прошел отличный внезапный стрим по мотивам весенних PHP Дайджестов от Валентина Удальцова:



Подписывайтесь на Telegram-канал PHP Digest.

Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 204

Источник: https://habr.com/ru/post/562718/


Интересные статьи

Интересные статьи

В очередном дайджесте по традиции собрали «классические» и нетривиальные ИБ-инциденты за месяц. Нынешняя подборка серьезнее некуда: тут вал атак на КИИ, рекордные потери ...
ПЛИСкульт привет,  FPGA  хаб.  Мы продолжаем держать вас в курсе последних событий из мира программируемой логики и решили немного пересмотреть формат дайджеста. Мы д...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Фото: Валерий Горбачев (PHP Krasnodar) Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8.0 RC 3 и видеообзоры новых возможностей, Composer 2, завершение разработки F...
В этом выпуске переезд Lingualeo на PostgreSQL, главные ошибки свободного ПО, война Epic c Apple, восприятие интерфейсов и золотой век программирования, «часы Уизли», поведение пользо...