PHP-Дайджест № 176 (11 – 23 марта 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: обновления 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-engine — NightTiger продолжает демонстрировать все новые возможности PHP благодаря FFI.
    В документации пример создания расширения для PHP на PHP, с помощью которого данные можно сохранять в памяти между запросами.
  • Badcow/DNS — Объектное представление записей DNS в PHP, а также парсер и билдер записей.
  • yswery/PHP-DNS-SERVER — И полноценный DNS-сервер, написанный полностью на PHP с использованием предыдущей библиотеки.
  • nikolaposa/rate-limit — Рейт-лимитер общего назначения с бекендом на Redis.
  • Spartaques/phpkafkacore — Библиотека для работы с Kafka на чистом PHP, альтернатива ext-rdkafka.

Symfony


  • Новое в Symfony 5.1 — Среди прочего будет добавлена возможность автовнедрения зависимостей через указание типа публичного свойства.
  • symfony/uid — Новый экспериментальный компонент Symfony, для генерации UUID.
  • Неделя Symfony #689 (16-22 марта 2020)

Laravel


  • Вышел Laravel 7.1.2 с фиксом XSS-уязвимости.
  • В связи со спором о товарном знаке в отношении названия «Airlock» пакет Airlock переименован в Sanctum.
  • grosv/eloquent-sheets — Позволяет использовать Google-таблицы в качестве источника данных для Eloquent.
  • habr Принцип DRY на примере Laravel.
  • ru Продвинутые советы по Маршрутизации в Laravel.
  • video Серия видеороликов с объяснением конфигурационных ключей для очередей в Laravel.

Async PHP


  • reactphp/socket 1.4.0 — В релизе добавлена поддержка IPv6.
  • video Продолжение бесед Сергея Жука с Marc Morera (автором DriftPHP) об асинхронном PHP и на этот раз в контексте CQRS.

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


  • PHP reimagined — Прагматичная подборка изменений, которые могли бы сделать PHP лучше.
  • Event driven server in PHP — Впечатления от разработки EventSourcing приложения, в котором все агрегаты и проекции загружаются в память и никогда не хранятся на диске.
  • О графе потока управления в PHP и использовании ircmaxell/php-cfg.
  • Об этикете Composer пакетов и когда стоит изменять мажорную версию семвера, а когда нет.
  • Подробная инструкция по созданию окружения на базе Docker.
  • Как научить Codeception прыгать к определениям методов хелперов и модулей в PhpStorm — Прислал catanfa.
  • Сравнение и бенчмарки JSON и MessagePack.
  • habr NoVerify: PHP-линтер, который работает быстро.
  • habr Обработка миллионов событий в сутки при помощи каскадов очередей.

Аудио/Видео


  • audio Между скобок — Новый подкаст про PHP на русском! В первом эпизоде про перенос легаси приложения с Zend на Symfony без остановки разработки.
  • video Онлайн-митап про PHP и удалёнку
  • video Видеозаписи с BeerPHP SPb Meetup
  • audio PHP Internals News #44 — О неизменяемых свойствах с Máté Kocsis.
  • audio PHP Internals News #45 — С Никитой Поповым о дальнейшем развитии PHP.

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

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

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

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

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


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

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

Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 9 и другие релизы, 3 свежих RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое друго...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...