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

PHP Дайджест № 210 (16 – 30 августа 2021)

PHP Дайджест № 210 (16 – 30 августа 2021) - 1

Фото: Peter Kokot [1].

Подборка свежих новостей и материалов из мира PHP. Вышла третья бета PHP 8.1, Swiftmailer больше не будет поддерживаться, PHP-FIG обсуждает обновляемые стандарты PER. Для PHP 8.2 предложены два новых RFC: про удаление динамических свойств и перегрузку операторов. Также в выпуске порция полезных инструментов, статьи и видео.

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

PHP Дайджест № 210 (16 – 30 августа 2021) - 2 Новости

  • PHP 8.1 Beta 3 [2]

    Последняя бета в цикле. Следующим релизом станет RC 1, который ожидается 2 сентября.

  • PHP 8.0.10 [3], PHP 7.4.23 [4], PHP 7.3.30 [5]

    Секьюрити обновления актуальных веток.

  • Конец Swiftmailer [6]

    В ноябре прекращается поддержка популярного пакета для отправки почты Swiftmailer [7]. Вместо него будет развиваться symfony/mailer [8].

    Возможности и концепции Symfony Mailer повторяют Swiftmailer, поэтому миграция должна пройти достаточно легко. В Rector есть скрипт миграции [9] и он всего лишь переименовывает классы.

  • PHP Evolving Recommendations (PERs) [10]

    Раньше PHP-FIG выпускали только PSP-стандарты. Проблема в том, что некоторые подобные стандарты требуют постоянной доработки. Например, в случае с код-стайлом сейчас PSR-12 не включает новые возможности из PHP 7.4-8.0.

    Предлагается ввести новый тип рекомендаций PER, которые можно будет обновлять более оперативно.

  • 4 сентября — PHP fwdays'21 Online [11]

    Совсем скоро пройдёт традиционная конференция от fwdays. Программа [12].

    Будет бесплатная трансляция всех докладов в день проведения (нужно зарегистрироваться).

    Есть дополнительные платные бонусы. Для них можно использовать промокод: HABRDIGEST.

PHP Дайджест № 210 (16 – 30 августа 2021) - 3 PHP Internals

  • [RFC] Deprecate dynamic properties [13]

    В текущих версиях PHP, если попытаться записать в несуществующее свойство, то оно будет автоматически создано.

    В современном коде это редко делается намеренно, чаще это опечатка или просто дурной тон.

    В этом RFC предлагается задепрекейтить и впоследствии удалить возможность создания динамических (необъявленных) свойств.

    class User {
        public $name;
    }
    
    $user = new User;
    
    // Assigns declared property User::$name.
    $user->name = "foo";
    
    // Oops, a typo:
    $user->nane = "foo";
    // PHP <= 8.1: Молча создает динамическое свойство $user->nane.
    // PHP    8.2: Вызывает предупреждение, но все равно создает динамическое свойство.
    // PHP    9.0: Выбрасывает исключение Error.
    

    Это изменение не будет касаться класса stdClass и унаследованных от него. Поведение магических __get/__set также не затрагиваются этим изменением.

    $obj = (object) []; // = new stdClass;
    
    // No deprecation warning
    $obj->foo = 1;
    
    class myStdClass extends stdClass {}
    $obj2 = new myStdClass;
    
    // No deprecation warning
    $obj2->bar = 1;
    

    Благодаря этому изменению в PHP 9.0 можно будет уменьшить размер объекта на 8 байт. На одном объекте это, конечно, ничто, но суммарно на больших приложениях будет заметно.

  • [RFC] User Defined Operator Overloads [14]

    В этом RFC автор, Jordan LeDoux, предлагает добавить возможность перегрузки операторов.

    По сути, для каждого оператора предлагается определить свой магический метод, например __add() для `+` или __equals() для `==`.

    С их помощью можно описывать желаемое поведение для объектов.

    $a = new Number(8);
    $b = new Number(6);
    $c = new Number(4);
    
    // Вместо такого
    $posRoot = $b->mul(-1)->add($b->pow(2)->sub($a->mul($c)->mul(4))->sqrt())->div($a->mul(2));
    
    // Можно будет сделать вот так
    $posRoot = ((-1 * $b) + ($b ** 2 - 4 * $a * $c)->sqrt()) / (2 * $a);
    

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

    Тем не менее предложение спорное и слишком много нюансов в нем. И несмотря на очень детальный и продуманный RFC, вероятность принятия невысокая.

  • cross [RFC] Nullable Intersection types [15]

    Предложение сделать пересечения типов nullable в PHP 8.1 не прошло голосование. Многие голосовали против, потому что оно было выдвинуто слишком поздно. Поэтому есть вероятность, что позже будет переголосование в PHP 8.2.

PHP Дайджест № 210 (16 – 30 августа 2021) - 5 Инструменты

  • whsv26/functional [16] — Автор столкнулся с проблемами существующих реализаций коллекций на PHP и написал свой пакет. Подробнее в статье Дженерик коллекции в PHP [17].
  • phpseclib/phpseclib [18] — Реализация SSH, SFTP, RSA / DSA / ELLIPTIC CURVES, AES / CHACHA20 / ETC, X.509 на чистом PHP.
  • doekenorg/iterator-functions [19] — Набор функций аналогичных встроенным array_*, но принимающих итераторы. На случай если не нравится классика от Никиты Попова nikic/iter [20].
  • azjezz/psl [21] — Как могла бы выглядеть стандартная библиотека PHP.
  • php-censor/phpdoc-checker [22] — Консольная утилита для валидации PHPDoc-блоков.
  • github-php/sponsors [23] — Пакет для работы с API GitHub Sponsors. Можно организовать контроль доступа проверяя является ли пользователь спонсором.
  • paglliac/php-dependency-analysis [24] — Инструмент для анализа зависимостей внутри проекта. Более продвинутые штуки можно делать с помощью qossmic/deptrac [25] или phparkitect/arkitect [26].
  • ArtARTs36/GitHandler [27] — Обертка над Git для PHP. Прислал Ukrainsky [28].
  • butschster/CronExpressionGenerator [29] — Генератор cron выражений. Прислал butschster [30].
  • butschster/ray-server [31] — Бесплатный сервер для отладки PHP приложений с помощью spatie/ray [32]. Пост [33] с обзором возможностей и деталями реализации. Прислал butschster [30].

PHP Дайджест № 210 (16 – 30 августа 2021) - 6 Symfony

PHP Дайджест № 210 (16 – 30 августа 2021) - 7 Laravel

PHP Дайджест № 210 (16 – 30 августа 2021) - 10 Yii

PHP Дайджест № 210 (16 – 30 августа 2021) - 12 Статьи

PHP Дайджест № 210 (16 – 30 августа 2021) - 16 Аудио/Видео



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

Этот дайджест подготовлен совместно с Insolita [66]. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.

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

Прислать ссылку можно через форму [69] или просто написав мне в телеграм [68].
Поиск ссылок по всем дайджестам [70]
Предыдущий выпуск: PHP-Дайджест № 209 [71]

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

Источник [72]


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

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

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

[1] Peter Kokot: https://twitter.com/peter_kokot

[2] PHP 8.1 Beta 3: https://www.php.net/archive/2021.php#2021-08-19-1

[3] PHP 8.0.10: https://www.php.net/ChangeLog-8.php#8.0.10

[4] PHP 7.4.23: https://www.php.net/ChangeLog-7.php#7.4.23

[5] PHP 7.3.30: https://www.php.net/ChangeLog-7.php#7.3.30

[6] Конец Swiftmailer: https://symfony.com/blog/the-end-of-swiftmailer

[7] Swiftmailer: https://github.com/swiftmailer/swiftmailer

[8] symfony/mailer: https://github.com/symfony/mailer

[9] скрипт миграции: https://github.com/rectorphp/rector-symfony/blob/e325c2283e6dfeaa6b54f5b0d54033bf88aeb7ab/config/sets/swiftmailer/swiftmailer-to-symfony-mailer.php

[10] PHP Evolving Recommendations (PERs): https://github.com/php-fig/fig-standards/pull/1235

[11] 4 сентября — PHP fwdays'21 Online: https://fwdays.com/en/event/php-fwdays-2021?utm_source=infop-habrdigest&utm_medium=post&utm_campaign=php-fwdays-2021

[12] Программа: https://fwdays.com/en/event/php-fwdays-2021#speakers-event

[13] [RFC] Deprecate dynamic properties: https://wiki.php.net/rfc/deprecate_dynamic_properties

[14] [RFC] User Defined Operator Overloads: https://wiki.php.net/rfc/user_defined_operator_overloads

[15] [RFC] Nullable Intersection types: https://wiki.php.net/rfc/nullable_intersection_types

[16] whsv26/functional: https://github.com/whsv26/functional

[17] Дженерик коллекции в PHP: https://habr.com/ru/post/574782/

[18] phpseclib/phpseclib: https://github.com/phpseclib/phpseclib

[19] doekenorg/iterator-functions: https://github.com/doekenorg/iterator-functions

[20] nikic/iter: https://github.com/nikic/iter

[21] azjezz/psl: https://github.com/azjezz/psl

[22] php-censor/phpdoc-checker: https://github.com/php-censor/phpdoc-checker

[23] github-php/sponsors: https://github.com/github-php/sponsors

[24] paglliac/php-dependency-analysis: https://github.com/paglliac/php-dependency-analysis

[25] qossmic/deptrac: https://github.com/qossmic/deptrac

[26] phparkitect/arkitect: https://github.com/phparkitect/arkitect

[27] ArtARTs36/GitHandler: https://github.com/ArtARTs36/GitHandler

[28] Ukrainsky: https://habr.com/ru/users/ukrainsky/

[29] butschster/CronExpressionGenerator: https://github.com/butschster/CronExpressionGenerator

[30] butschster: https://habr.com/ru/users/butschster/

[31] butschster/ray-server: https://github.com/butschster/ray-server

[32] spatie/ray: https://github.com/spatie/ray

[33] Пост: https://butschster.medium.com/%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-%D0%B4%D0%B5%D0%B1%D0%B0%D0%B3%D0%B0-laravel-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B8-%D0%BD%D0%B5-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-4fed54667099

[34] kafkiansky/symfony-middleware: https://github.com/kafkiansky/symfony-middleware

[35] Symfony Messenger в микросервисах: контракты сообщений и отказоустойчивость: https://medium.com/@dmitrii_tarasov/symfony-messenger-in-microservices-message-contracts-and-resilience-b9cc1a95fcf9

[36] Неделя Symfony #765 (23-29 августа 2021): https://symfony.com/blog/a-week-of-symfony-765-23-29-august-2021

[37] Результаты опроса State of Laravel 2021: https://stateoflaravel.com/

[38] Laravel Daily: https://www.youtube.com/watch?v=Ruiug-dW_7c

[39] Создание RoadRunner плагина для Laravel Octane: https://medium.com/@SlyFireFox/laravel-octane-build-your-first-plugin-for-roadrunner-d8906f0f5926

[40] JustIversen/laravel-job-chainer: https://github.com/JustIversen/laravel-job-chainer

[41] Testing Laravel: https://testing-laravel.com/

[42] как тестировать middleware: https://www.youtube.com/watch?v=l3kioTuYt98

[43] Полезные приемы тестирования Laravel: https://www.youtube.com/watch?v=fOYcK-Aynwc&t=811s

[44] Пользовательские часовые пояса: https://laravel.demiart.ru/user-defined-timezones/

[45] Новости Yii 2021, выпуск 3: https://habr.com/ru/post/573940/

[46] Yii 2 интеграции API: https://gitlab.com/users/dicr/projects

[47] yiisoft/mutex: https://github.com/yiisoft/mutex

[48] прилагаются: https://github.com/orgs/yiisoft/repositories?q=mutex&type=&language=&sort=

[49] Named arguments and open source projects: https://stitcher.io/blog/named-arguments-and-variadic-functions

[50] Несколько советов по использованию дата-провайдеров в тестах PHPUnit: https://peakd.com/hive-168588/@crell/fun-with-phpunit-data-providers

[51] Об использовании абстракций PSR: https://matthiasnoback.nl/2021/08/on-using-psr-abstractions/

[52] какие PSRи почему используются в Yii 3: https://rmcreative.ru/blog/post/yii-3-i-psr

[53] О создании публичных/приватных монорепозиториев для PHP-проектов: https://www.smashingmagazine.com/2021/08/public-private-multi-monorepo-php-projects/

[54] Поговорим о проблемах кэширования: http://amdy.su/2021/08/23/cache/

[55] Визуальное автотестирование сайтов с помощью Codeception: https://habr.com/ru/post/574368/

[56] Заметки KPHP: тестирование и бенчмарки: https://habr.com/ru/company/vk/blog/572424/

[57] Большой разговор про автотесты в PHP (Артём Прозоров, ZeBrains): https://www.youtube.com/watch?v=8lvn-6Lsn24

[58] devmode #89 — Should Craft CMS use Yii3 or Laravel?: https://www.youtube.com/watch?v=_mqm6eY_83Q

[59] Пятиминутке PHP: https://twitter.com/5minphp/status/1431537277524709377

[60] PHP Internals News #94: https://phpinternals.news/94

[61] RFC Unwrap Reference After Foreach: https://wiki.php.net/rfc/foreach_unwrap_ref

[62] PHP Internals News #93 : https://phpinternals.news/93

[63] Jordan LeDoux: https://github.com/JordanRL/

[64] RFC Never For Parameter Types: https://wiki.php.net/rfc/never_for_parameter_types

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

[66] Insolita: https://twitter.com/DonnaInsolita

[67] личку хабра: https://habrahabr.ru/conversations/pronskiy/

[68] телеграм: https://t.me/pronskiy

[69] через форму: https://bit.ly/php-digest-add-link

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

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

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