Свежая подборка со ссылками на новости и материалы. В выпуске: обновления PHP и Composer 1.10, переносы конференций, 3 новых RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.

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



Новости и релизы


  • PHP 7.4.4, PHP 7.3.16, PHP 7.2.29 — Секьюрити релизы, всем рекомендуется обновиться.
  • Composer 1.10.0 — Среди прочих изменений, добавлено новое поле «funding» в composer.json, в котором можно указать, как поддержать проект. По умолчанию данные берутся из FUNDING.yml на GitHub. Также добавлена новая команда composer fund, которая показывает информацию о спонсорстве для ваших зависимостей.
  • Перенос мероприятий
    В связи с эпидемией и ограничительными мерами, многие мероприятия перенесены или переходят в онлайн.
    PHP Russia – Конференция перенесена, а 13 мая пройдёт первая PHP Russia Online.
    habr Митапы PHP-сообществ в марте, которые переходят в онлайн или переносятся.
    • Переходят в онлайн: Laracon EU Madrid, Midwest PHP.

PHP Internals


  • [RFC] str_contains — Предложение принято. Функция str_contains() будет проверять, содержится ли строка в другой строке.
  • [RFC] throw expression — В PHP нельзя бросить исключение из стрелочной функции, потому что throw – это оператор, а не выражение. Предлагается сделать его выражением и тогда возможно будет использование в коротких лямбдах, в тернарных операторах и других конструкциях:
    $callable = fn() => throw new Exception();
    
    $value = $nullableValue ?? throw new InvalidArgumentException();
    
    $value = $falsableValue ?: throw new InvalidArgumentException();
    
    $value = !empty($array)
                ? reset($array)
                : throw new InvalidArgumentException();
  • [RFC] Compact Object Property Assignment — Предлагается добавить компактный синтаксис для присвоения значений нескольким свойствам объекта в одном выражении. Идея уже раньше рассматривалась в рамках [RFC] Object Initializer, но не прошла голосование. На этот раз синтаксис весьма странный:
    doTheFoo((new Foo)->[
        a = 1,
        b = 2,
        c = 3,
    ]);
    
    // Эквивалентно:
    
    $myObj = new Foo();
    
    $myObj->a = 1;
    $myObj->b = 2;
    $myObj->c = 3;
    
    doTheFoo($myObj);
  • [RFC] Is Literal Check — Предлагается добавить функцию is_literal(), чтобы разработчики/фреймворки могли быть уверены, что они работают с безопасным значением, то есть созданным из одного или нескольких литералов, опредёленных в PHP, а не сформированных динамически из пользовательского ввода.
    define('TABLE', 'example');
    
    $sql = 'SELECT * FROM ' . TABLE . ' WHERE id = ?';
    
    is_literal($sql); // Returns true
    
    $sql .= ' AND id = ' . mysqli_real_escape_string($db, $_GET['id']);
    
    is_literal($sql); // Returns false
    

    К предложению много вопросов, и реализация нетривиальная. Похоже, шансов мало.
  • [RFC] Write-Once Properties — Судя по ходу голосования за неизменяемые свойства, предложение в текущем виде не преодолеет порог. Одним из основных аргументов против является тот факт, что свойства, объявленные неизменяемыми, нельзя будет изменить даже изнутри класса.
  • Отличный репозиторий с описанием всех непринятых RFC пополнился статьёй о пропуске дефолтных значений при вызове функций.
    Все статьи содержат описания трудностей и прогнозы дальнейшей судьбы.
    Ещё автор добавил статью Understanding RFC attitudes о том, почему вообще какие-то предложения проходят, а какие-то нет, и как участники PHP Internals оценивают RFC.

Инструменты


  • async-aws/aws — Легковесная и асинхронная альтернатива официальному SDK для AWS.
  • lisachenko/z-engineNightTiger продолжает демонстрировать все новые возможности PHP благодаря FFI.
    В документации пример создания расширения для PHP на PHP, с помощью которого данные можно сохранять в памяти между запросами.
  • Badcow/DNS — Объектное представление записей DNS в PHP, а также парсер и билдер записей.
  • yswery/PHP-DNS-SERVER — И полноценный DNS-сервер, написанный полностью на PHP с использованием предыдущей библиотеки.
  • nikolaposa/rate-limit — Рейт-лимитер общего назначения с бекендом на Redis.
  • Spartaques/phpkafkacore — Библиотека для работы с Kafka.

Symfony



Laravel



Async PHP



Материалы для обучения



Аудио/Видео



Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.

Больше новостей и комментариев в Telegram-канале PHP Digest.

Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 175