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

В PHP 8.1 будет enum, и еще два принятых, два отклоненных и три новых RFC предложения для PHP 8.1. WordPress используется на 40% сайтов. Почему нужно убрать strict_types, почему не стоит использовать empty(), а также инструменты, видео, статьи, подкасты, и PHP Дайджест Live [1] в 20:00 МСК.
Приятного чтения!
Также начиная 2020.3.1 теперь доступны аудио/видео звонки во время сессии совместного программирования через Code With Me [3].
enum RfcStatus {
case Draft;
case UnderDiscussion;
case Accepted;
}
function setRfcStatus(RfcStatus $status) :void {
// ...
}
setRFCStatus(RfcStatus::Accepted); // Ок
setRFCStatus('Draft'); // TypeError
Подробнее про инамы можно прочитать в пересказах RFC в статье Брента [13] и еще подробнее на php.watch [14].
В Symfony уже открыли тикеты [15] для добавления поддержки инамов.
null в качестве аргумента, когда параметр не nullable.
А начиная с PHP 8.1 встроенные функции тоже будут бросать TypeError. Например, str_contains("", null). 3v4l.org/OVoa0A [17].
Интересный факт: предложение принято единогласно, притом что это довольно крупная поломка обратной совместимости в PHP.
$array1 = ['a' => 'apple', 'p' => 'pear'];
$array2 = ['b' => 'banana', 'o' => 'orange'];
$array = [...$array1, ...$array2];
// Приблизительно то же самое что:
$array = array_merge($array1, $array2);
Теперь Fiber API предоставляет самый минимум и похож на аналогичные возможности в Ruby.
Пример использования с ReactPHP trowski/react-fiber [20]:
$loop = new FiberLoop(Factory::create());
$browser = new Browser($loop);
$request = function (string $method, string $url) use ($browser, $loop): void {
/** @var Response $response */
$response = $loop->await($browser->requestStreaming($method, $url));
/** @var ReadableStreamInterface $stream */
$stream = $response->getBody();
$body = $loop->await(Streambuffer($stream));
var_dump(sprintf(
'%s %s; Status: %d; Body length: %d',
$method,
$url,
$response->getStatusCode(),
strlen($body)
));
};
$requests = [];
$requests[] = $loop->async($request, 'GET', 'https://reactphp.org');
$requests[] = $loop->async($request, 'GET', 'https://google.com');
$requests[] = $loop->async($request, 'GET', 'https://www.php.net');
$loop->await(Promiseall($requests));
Spl и создать в нем алиасы для существующих классов: SplFixedArray -> SplFixedArray. А все новые классы, такие как CachedIterable и ReverseIterator уже вносить сразу в новый неймспейс.
А пока в качестве альтернативы есть отличный инструмент azjezz/psl [23].
mysqli. В этом RFC предлагает добавить новый необязательный параметр в mysqli_stmt::execute(). Он будет принимать массив значений, которые автоматически биндятся, вместо отдельного вызова mysqli_stmt::bind_param(). К слову, сейчас bind_param принимает только переменные по ссылке.any() и all() для итераторов не прошло голосование. var_export не нашла поддержки, поэтому пока используем юзерленд альтернативу brick/varexporter [28].strict_types=1 – слишком строгий. Этот документ описывает причины существования этих двух режимов, их недостатки и что нужно сделать, чтобы объединять оба режима.
Документ написан George Peter Banyard [30], и пока он не планирует его выдвигать в качестве официального RFC.
Разберем его положения на стриме [31].

Уже традиционный стрим по мотивам PHP Дайджеста. Будет разбор новостей и ссылок из выпуска с подробностями и дополнительными деталями.
Начало в 20:00 Москва, Минск / 19:00 Киев.
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра [76] или телеграм [77].
Больше новостей и комментариев в Telegram-канале PHP Digest [78].
Прислать ссылку [79]
Поиск ссылок по всем дайджестам [80]
← Предыдущий выпуск: PHP-Дайджест № 198 [81]
Автор: Роман Пронский
Источник [82]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/361833
Ссылки в тексте:
[1] PHP Дайджест Live: https://www.youtube.com/watch?v=n5b4EnFAxfE
[2] PhpStorm 2021.1 EAP: https://blog.jetbrains.com/phpstorm/2021/02/phpstorm-2021-1-eap-2/
[3] через Code With Me: https://blog.jetbrains.com/blog/2021/02/16/code-with-me-beta-support-for-audio-and-video-calls/
[4] xdebug.cloud: https://xdebug.cloud/
[5] Доля WordPress перевалила за 40% среди топ 10 млн сайтов: https://w3techs.com/technologies/overview/content_management
[6] Подробнее: https://w3techs.com/blog/entry/40_percent_of_the_web_uses_wordpress
[7] исторический тренд: https://w3techs.com/technologies/history_overview/content_management/all/y
[8] Каким будет 2021-й год для PHP?: https://habr.com/ru/company/skyeng/blog/542070/
[9] большой стрим: https://www.youtube.com/watch?v=6JF2U39J4RY
[10] 25 февраля, 19:00 МСК онлайн митап от PHP of By: https://t.me/phpofby/5843
[11] phpcommunity.ru: https://phpcommunity.ru/#rec242797866
[12] [RFC] Enumerations: https://wiki.php.net/rfc/enumerations
[13] статье Брента: https://stitcher.io/blog/php-enums
[14] на php.watch: https://php.watch/versions/8.1/enums
[15] открыли тикеты: https://github.com/symfony/symfony/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+enum+label%3A%22Help+wanted%22
[16] [RFC] Deprecate passing null to non-nullable arguments of internal functions: https://wiki.php.net/rfc/deprecate_null_to_scalar_internal_arg
[17] 3v4l.org/OVoa0A: https://3v4l.org/OVoa0A
[18] [RFC] Array unpacking with string keys: https://wiki.php.net/rfc/array_unpacking_string_keys
[19] [RFC] Fibers: https://wiki.php.net/rfc/fibers
[20] trowski/react-fiber: https://github.com/trowski/react-fiber
[21] [RFC] CachedIterable (rewindable, allows any key&repeating keys): https://wiki.php.net/rfc/cachediterable
[22] Proposal: namespace the SPL: https://externals.io/message/113141
[23] azjezz/psl: https://github.com/azjezz/psl
[24] [RFC] mysqli bind in execute: https://wiki.php.net/rfc/mysqli_bind_in_execute
[25] инициативу: https://wiki.php.net/rfc/improve_mysqli
[26] [RFC] PHPiterableany() and all() on iterables: https://wiki.php.net/rfc/any_all_on_iterable
[27] [RFC] var_representation(): readable alternative to var_export(): https://wiki.php.net/rfc/readable_var_representation
[28] brick/varexporter: https://github.com/brick/varexporter
[29] [Draft] Unify PHP's typing modes: https://github.com/Girgias/unify-typing-modes-rfc
[30] George Peter Banyard: https://github.com/sponsors/Girgias
[31] на стриме: #digest-live
[32] Об Observer API в PHP 8: https://www.datadoghq.com/blog/engineering/php-8-observability-baked-right-in/
[33] renoki-co/php-k8s: https://github.com/renoki-co/php-k8s
[34] marcocesarato/php-conventional-changelog: https://github.com/marcocesarato/php-conventional-changelog
[35] andrey-helldar/package-wizard: https://github.com/andrey-helldar/package-wizard
[36] rryqszq4/ngx_php7: https://github.com/rryqszq4/ngx_php7
[37] symfony/panther 1.0: https://github.com/symfony/panther
[38] Как эффективно использовать компонент Symfony Lock на примере с Messenger: https://developer.happyr.com/symfony-lock-and-messenger-component
[39] Аутентификация и авторизация пользователей с общей сессией в микросервисах: https://carlos-compains.medium.com/user-authentication-and-authorization-with-shared-session-in-a-micro-services-architecture-b2dd43043efd
[40] Неделя Symfony #738 (15-21 февраля 2021): https://symfony.com/blog/a-week-of-symfony-738-15-21-february-2021
[41] Тестирование middleware в Laravel: https://www.kai-sassnowski.com/post/testing-http-middleware-in-laravel/
[42] Тред с советами по перфомансу Laravel: https://threadreaderapp.com/thread/1356292193032368128
[43] Laravel Internals #4: https://www.youtube.com/watch?v=N7BBLWnHhJ8
[44] Laravel–Дайджест (8–21 февраля 2021): https://habr.com/ru/post/543556/
[45] yiisoft/files: https://github.com/yiisoft/files
[46] yiisoft/var-dumper: https://github.com/yiisoft/var-dumper
[47] yiisoft/auth-jw: https://github.com/yiisoft/auth-jwt
[48] yiisoft/log: https://github.com/yiisoft/log
[49] yiisoft/event-dispatcher: https://github.com/yiisoft/event-dispatcher
[50] swow/swow: https://github.com/swow/swow
[51] Как делать рефакторинг в PhpStorm: https://www.youtube.com/watch?v=LamxHRmwK2Q&list=PLQ176FUIyIUZjFbdm7Ux3Okalij5jMAgw&index=6
[52] 26 трюков и советов по PhpStorm: https://twitter.com/i/events/1268886882013917184
[53] Как защититься от Dependency Confusion в PHP: https://habr.com/ru/company/vdsina/blog/542598/
[54] Когда использовать empty() в PHP? Я бы сказал никогда.: https://beberlei.de/2021/02/19/when_to_use_empty_in_php_i_say_never.html
[55] Введение в мутационное тестирование на PHP: https://johnbraun.blog/posts/mutation-testing
[56] MySQL под нагрузкой > 40000 QPS, что может пойти не так: https://telegra.ph/MySQL-pod-nagruzkoj--40-000-QPS-chto-mozhet-pojti-ne-tak-02-04
[57] Кирилл Егоров: https://t.me/HeadOfWeb
[58] Решаем проблемы с интерпретацией ошибок в сервисной архитектуре: https://habr.com/ru/company/skyeng/blog/531768/
[59] Рефакторинг пет проекта: докеризация, метрики, тесты: https://habr.com/ru/post/542978/
[60] Невидимые символы, скрывающие веб-шелл в зловредном коде на PHP: https://habr.com/ru/company/vdsina/blog/542012/
[61] SafetyNet Attestation — описание и реализация проверки на PHP: https://habr.com/ru/company/funcorp/blog/541934/
[62] Tagged Unions в PHP (примерно как в Rust): https://habr.com/ru/post/541670/
[63] Структуры с процедурами или объекты?: https://elisdn.ru/blog/142/structs-or-objects
[64] Как регистрировать и тестировать shutdown функции: https://www.youtube.com/watch?v=5eOHwubukgY
[65] Пых: https://t.me/phpyh
[66] PHP Point: https://www.youtube.com/PHPPoint
[67] Мифы о производительности приложений на PHP: https://www.youtube.com/watch?v=Jp03qL_PFDU
[68] Онлайн митап от ВсеИнструменты.Ру о PHP, MySQL, нагрузки и асинхронность: https://www.youtube.com/watch?v=eLjcP6r4YJ8
[69] Пятиминутка PHP №85: https://5minphp.ru/episode85/
[70] PHP Release Radar #5: https://www.youtube.com/watch?v=VRx2LDtJ3xo
[71] Frank de Jonge: https://twitter.com/frankdejonge
[72] deprecate null, and array unpacking: https://phpinternals.news/76
[73] restrict globals usage, and phase out serializable: https://phpinternals.news/75
[74] mario-deluna/php-render: https://github.com/mario-deluna/php-render
[75] Код: https://github.com/mario-deluna/php-render/blob/master/examples/10_phong/model.php
[76] личку хабра: https://habrahabr.ru/conversations/pronskiy/
[77] телеграм: https://t.me/pronskiy
[78] PHP Digest: https://t.me/phpdigest
[79] Прислать ссылку: https://bit.ly/php-digest-add-link
[80] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[81] Предыдущий выпуск: PHP-Дайджест № 198: https://habr.com/ru/post/541300/
[82] Источник: https://habr.com/ru/post/543628/?utm_source=habrahabr&utm_medium=rss&utm_campaign=543628
Нажмите здесь для печати.