- PVSM.RU - https://www.pvsm.ru -
Фото: Peter Kokot [1].
Подборка свежих новостей и материалов из мира PHP. Вышла третья бета PHP 8.1, Swiftmailer больше не будет поддерживаться, PHP-FIG обсуждает обновляемые стандарты PER. Для PHP 8.2 предложены два новых RFC: про удаление динамических свойств и перегрузку операторов. Также в выпуске порция полезных инструментов, статьи и видео.
Приятного чтения!
Последняя бета в цикле. Следующим релизом станет RC 1, который ожидается 2 сентября.
Секьюрити обновления актуальных веток.
В ноябре прекращается поддержка популярного пакета для отправки почты Swiftmailer [7]. Вместо него будет развиваться symfony/mailer [8].
Возможности и концепции Symfony Mailer повторяют Swiftmailer, поэтому миграция должна пройти достаточно легко. В Rector есть скрипт миграции [9] и он всего лишь переименовывает классы.
Раньше PHP-FIG выпускали только PSP-стандарты. Проблема в том, что некоторые подобные стандарты требуют постоянной доработки. Например, в случае с код-стайлом сейчас PSR-12 не включает новые возможности из PHP 7.4-8.0.
Предлагается ввести новый тип рекомендаций PER, которые можно будет обновлять более оперативно.
Совсем скоро пройдёт традиционная конференция от fwdays. Программа [12].
Будет бесплатная трансляция всех докладов в день проведения (нужно зарегистрироваться).
Есть дополнительные платные бонусы. Для них можно использовать промокод: HABRDIGEST.
В текущих версиях 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 автор, 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, вероятность принятия невысокая.
Предложение сделать пересечения типов nullable в PHP 8.1 не прошло голосование. Многие голосовали против, потому что оно было выдвинуто слишком поздно. Поэтому есть вероятность, что позже будет переголосование в PHP 8.2.
array_*
, но принимающих итераторы. На случай если не нравится классика от Никиты Попова nikic/iter [20].
Подписывайтесь на 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
Нажмите здесь для печати.