- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

PHP-Дайджест № 176 (11 – 23 марта 2020) - 2 Новости и релизы

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

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

  • [RFC] str_contains [9] — Предложение принято [10]. Функция str_contains() будет проверять, содержится ли строка в другой строке.
  • [RFC] throw expression [11] — В 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 [12] — Предлагается добавить компактный синтаксис для присвоения значений нескольким свойствам объекта в одном выражении. Идея уже раньше рассматривалась в рамках [RFC] Object Initializer [13], но не прошла голосование. На этот раз синтаксис весьма странный:
    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 [14] — Предлагается добавить функцию 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 [15] — Судя по ходу голосования за неизменяемые свойства, предложение в текущем виде не преодолеет порог. Одним из основных аргументов против является тот факт, что свойства, объявленные неизменяемыми, нельзя будет изменить даже изнутри класса.
  • Отличный репозиторий [16] с описанием всех непринятых RFC пополнился статьёй о пропуске дефолтных значений [17] при вызове функций.
    Все статьи содержат описания трудностей и прогнозы дальнейшей судьбы.
    Ещё автор [18] добавил статью Understanding RFC attitudes [19] о том, почему вообще какие-то предложения проходят, а какие-то нет, и как участники PHP Internals оценивают RFC.

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

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

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

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

Async PHP

PHP-Дайджест № 176 (11 – 23 марта 2020) - 12 Материалы для обучения

PHP-Дайджест № 176 (11 – 23 марта 2020) - 15 Аудио/Видео

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

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

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

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

Автор: Роман Пронский

Источник [68]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/350487

Ссылки в тексте:

[1] PHP 7.4.4: https://www.php.net/ChangeLog-7.php#7.4.4

[2] PHP 7.3.16: https://www.php.net/ChangeLog-7.php#7.3.16

[3] PHP 7.2.29: https://www.php.net/ChangeLog-7.php#7.2.29

[4] Composer 1.10.0: https://github.com/composer/composer/releases/tag/1.10.0

[5] PHP Russia: https://rmcreative.ru/blog/post/php-russia-online-i-perenos-php-russia

[6] Митапы PHP-сообществ в марте, которые переходят в онлайн или переносятся: https://habr.com/ru/company/skyeng/blog/492038/

[7] Laracon EU Madrid: https://laracon.eu/2020/tickets

[8] Midwest PHP: https://midwestphp.org/stream

[9] [RFC] str_contains: https://wiki.php.net/rfc/str_contains

[10] принято: https://t.me/phpdigest/127

[11] [RFC] throw expression: https://wiki.php.net/rfc/throw_expression

[12] [RFC] Compact Object Property Assignment: https://wiki.php.net/rfc/compact-object-property-assignment

[13] [RFC] Object Initializer: https://wiki.php.net/rfc/object-initializer

[14] [RFC] Is Literal Check: https://wiki.php.net/rfc/is_literal

[15] [RFC] Write-Once Properties: https://wiki.php.net/rfc/write_once_properties

[16] репозиторий: https://github.com/Danack/RfcCodex

[17] о пропуске дефолтных значений: https://github.com/Danack/RfcCodex/blob/master/explicit_defaults.md

[18] автор: https://twitter.com/MrDanack

[19] Understanding RFC attitudes: https://github.com/Danack/RfcCodex/blob/master/rfc_attitudes.md

[20] async-aws/aws: https://github.com/async-aws/aws

[21] lisachenko/z-engine: https://github.com/lisachenko/z-engine

[22] NightTiger: https://habr.com/ru/users/nighttiger/

[23] пример создания расширения: https://github.com/lisachenko/z-engine/#creating-php-extensions-in-runtime

[24] Badcow/DNS: https://github.com/Badcow/DNS

[25] yswery/PHP-DNS-SERVER: https://github.com/yswery/PHP-DNS-SERVER

[26] nikolaposa/rate-limit: https://github.com/nikolaposa/rate-limit

[27] Spartaques/phpkafkacore: https://github.com/Spartaques/phpkafkacore

[28] Новое в Symfony 5.1: https://symfony.com/blog/category/living-on-the-edge

[29] автовнедрения зависимостей: https://symfony.com/blog/new-in-symfony-5-1-autowire-public-typed-properties

[30] symfony/uid: https://github.com/symfony/uid

[31] Неделя Symfony #689 (16-22 марта 2020): https://symfony.com/blog/a-week-of-symfony-690-16-22-march-2020

[32] Laravel 7.1.2: https://blog.laravel.com/security-laravel-712-released

[33] Airlock переименован в Sanctum: https://blog.laravel.com/airlock-renamed-to-sanctum

[34] grosv/eloquent-sheets: https://github.com/grosv/eloquent-sheets

[35] Принцип DRY на примере Laravel: https://habr.com/ru/post/491728/

[36] Продвинутые советы по Маршрутизации в Laravel: https://laravel.demiart.ru/routing-advanced-tips/

[37] Серия видеороликов: https://divinglaravel.com/explaining-laravel-queue-configuration-keys

[38] reactphp/socket 1.4.0: https://github.com/reactphp/socket

[39] добавлена поддержка IPv6: https://clue.engineering/2020/introducing-ipv6-for-reactphp

[40] Продолжение бесед Сергея Жука с Marc Morera: https://www.youtube.com/watch?v=2F4Yw2J0p8E

[41] DriftPHP: https://github.com/driftphp

[42] PHP reimagined: https://stitcher.io/blog/php-reimagined

[43] Event driven server in PHP: https://stitcher.io/blog/event-driven-php

[44] О графе потока управления в PHP: https://www.silverf0x00.com/getting-started-with-php-cfg/

[45] ircmaxell/php-cfg: https://github.com/ircmaxell/php-cfg

[46] Об этикете Composer пакетов: https://sebastiandedeyne.com/composer-semver-and-underlying-dependency-changes/

[47] инструкция по созданию окружения на базе Docker: https://guille.cloud/build-a-docker-development-environment-for-php-projects/index.html

[48] Как научить Codeception прыгать к определениям методов хелперов и модулей: https://medium.com/@ivastly/how-to-teach-phpstorm-to-go-to-implemenation-of-codeception-modules-and-helpers-6acb81d41348

[49] catanfa: https://habr.com/ru/users/catanfa/

[50] Сравнение и бенчмарки JSON и MessagePack: https://thephp.website/en/issue/messagepack-vs-json-benchmark/

[51] NoVerify: PHP-линтер, который работает быстро: https://habr.com/ru/company/oleg-bunin/blog/487260/

[52] Обработка миллионов событий в сутки при помощи каскадов очередей: https://habr.com/ru/company/manychat/blog/492964/

[53] Между скобок: https://soundcloud.com/between-braces

[54] первом эпизоде: https://soundcloud.com/between-braces/1-dmitriy-kosov-o-pereezde-legasi-prilozheniya-s-zend-na-symfony

[55] Онлайн-митап про PHP и удалёнку: https://www.youtube.com/watch?v=WwINpXxxWMU

[56] Видеозаписи с BeerPHP SPb Meetup: https://www.youtube.com/channel/UC7HeLRn5kBpu1o-MiAcvCyw/videos

[57] PHP Internals News #44: https://phpinternals.news/44

[58] Máté Kocsis: https://twitter.com/kocsismate90

[59] PHP Internals News #45: https://phpinternals.news/45

[60] дальнейшем развитии PHP: https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-language-evolution.md

[61] личку: https://habrahabr.ru/conversations/pronskiy/

[62] почту: mailto:roman@pronskiy.com

[63] твиттер: https://twitter.com/pronskiy

[64] PHP Digest: https://t.me/phpdigest

[65] Прислать ссылку: https://bit.ly/php-digest-add-link

[66] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[67] Предыдущий выпуск: PHP-Дайджест № 175: https://habr.com/ru/post/491660/

[68] Источник: https://habr.com/ru/post/493594/?utm_source=habrahabr&utm_medium=rss&utm_campaign=493594