- PVSM.RU - https://www.pvsm.ru -
Подборка свежих новостей, инструментов, видео и материалов из мира PHP.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita [1]. Если понравился выпуск, плюсаните пост, пожалуйста.
php_filter_float()
, а в 8.0 и 8.1 еще с пачкой других фиксов.
Для PHP 7.3 обновления уже не выходят [5], даже если обнаружены проблемы безопасности. И хотя данной уязвимости PHP 7.3 не подвержена, тем не менее если вы все еще используете эту версию, то лучше запланировать обновление в ближайшее время.
PHPDoc
, так и в виде атрибута #[ArrayShape]
.
#[SensitiveParameter]
для предотвращения отображения конфиденциальныx данных в отладочных логах.
function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Error');
}
test('foo', 'bar', 'baz');
// В результате в отладочной строке значение секретной переменной должно быть заменено на какое-то абстрактное значение:
/*
Fatal error: Uncaught Exception: Error in test.php:8
Stack trace:
#0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz')
#1 {main}
thrown in test.php on line 8
*/
WARNING
) в полноценные исключения. Такое уже раньше делали в PHP 8.0 [13].
Ну а начать решил с использования необъявленных переменных. Сейчас в этом случае бросается Warning
и используется значение null
.
// PHP < 8.2
if ($user->admin) {
$restricted = false;
}
if ($restricted) { // Сейчас тут просто WARNING, а будет Exception
die('You do not have permission to be here');
}
// Чтоб исправить, нужно добавить инициализацию переменной
// PHP >= 8.2
$restricted = true; // <-- Вот тут
if ($user->admin) {
$restricted = false;
}
if ($restricted) {
die('You do not have permission to be here');
}
rand()
или mt_rand()
будут генерировать одну и ту же последовательность для одинакового посевного (seed) значения, заданного с помощью srand()
. Но из-за использования глобального состояния невозможно создать несколько генераторов с разными посевными значениями и использовать их одновременно.
Автор предлагает добавить объектный API для работы с генераторами псевдослучайных последовательностей, чтоб решить проблему глобального состояния.
// Сейчас вот так
mt_srand(1234, MT_RAND_PHP);
foobar();
$result = str_shuffle('foobar');
mt_srand(1234, MT_RAND_MT19937);
foobar();
$next = mt_rand();
// Предлагается вот так
$randomizer = new RandomRandomizer(new RandomEngineMersenneTwister(1234, MT_RAND_PHP));
foobar();
$result = $randomizer->shuffleString('foobar');
$randommizer = new RandomRandomizer(new RandomEngineMersenneTwister(1234, MT_RAND_MT19937));
foobar();
$next = $randomizer->getInt();
null
и false
в декларациях типов.mixed
, добавили never
, объединения и пересечения, не хватает юнит-типа [16].final
, private
и определения типов в коде из vendor. Потому что сколько можно терпеть эти издевательства! Под капотом использует обертку над стримом, поэтому на проде лучше не запускать :-)
Появился в ответ на твит про функцию invade()
и пакет spatie/invade [22]:
От себя еще добавлю, что теперь коллекции illuminate/collections [35] покрыты дженериками и дополнение кода для них работает в PhpStorm [36].
Краткий обзор Laracon online winter 2022 [40] подготовили камрады из CutCode.
artisan
для синхронизации настроек окружения и поддержания .env.example
в актуальном состоянии. Пост [45] в поддержку.Спасибо Сергею Предводителеву [53] за подготовку блока про Yii!
fromName
и tryFromName
для получения перечисления любого типа по его имени ($name
).В тему также пара постов про SOLID от сообщества: Вывернутый SOLID [60],
SRP или DRY? [61]
В ответ, конечно, указали [66] на преимущества Twig. Но вот Patrick Allaert, релиз-менеджер PHP 8.1, поделился своим весьма интересным подходом:
Его вьюшки — это не просто файлы, а классы в которых HTML он выводит непосредственно в методе __invoke()
. Кто-нибудь использует подобный подход?
Подписывайтесь на Telegram-канал PHP Digest [67].
Этот дайджест подготовлен совместно с Insolita [1]. Если вам понравился выпуск, подпишитесь на Юлию в твиттере [1] и поставьте плюс в пост, пожалуйста.
Заметили ошибку или опечатку? Сообщите в личку хабра [68] или телеграм [69].
Прислать ссылку можно через форму [70] или просто напишите мне в телеграм [69].
Поиск ссылок по всем дайджестам [71]
← Предыдущий выпуск: PHP-Дайджест № 221 [72]
Автор: Роман Пронский
Источник [73]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/372377
Ссылки в тексте:
[1] Insolita: https://twitter.com/DonnaInsolita
[2] PHP 7.4.28: https://www.php.net/ChangeLog-7.php#7.4.28
[3] PHP 8.0.16: https://www.php.net/ChangeLog-8#8.0.16
[4] PHP 8.1.3: https://www.php.net/ChangeLog-8#8.1.3
[5] уже не выходят: https://www.php.net/supported-versions.php
[6] Ubuntu 22.04 LTS выйдет с PHP 8.1: https://linuxconfig.org/ubuntu-22-04-features-and-release-date
[7] предлагается: https://github.com/symfony/symfony/pull/45377
[8] уже сделали: https://www.drupal.org/node/3264830
[9] PhpStorm 2022.1 EAP: https://blog.jetbrains.com/phpstorm/2022/02/phpstorm-2022-1-eap-3/
[10] [RFC] Redacting parameters in back traces: https://wiki.php.net/rfc/redact_parameters_in_back_traces
[11] [RFC] Undefined Variable Error Promotion: https://wiki.php.net/rfc/undefined_variable_error_promotion
[12] предложил: https://externals.io/message/116918
[13] делали в PHP 8.0: https://wiki.php.net/rfc/engine_warnings
[14] [RFC] Random Extension 4.0: https://wiki.php.net/rfc/rng_extension
[15] [RFC] Allow null and false as stand-alone types: https://wiki.php.net/rfc/null-false-standalone-types
[16] юнит-типа: https://en.wikipedia.org/wiki/Unit_type
[17] cebe/php-openapi: https://github.com/cebe/php-openapi
[18] spatie/github-actions-watcher: https://github.com/spatie/github-actions-watcher
[19] nette/php-generator: https://github.com/nette/php-generator
[20] sherifabdlnaby/kubephp: https://github.com/sherifabdlnaby/kubephp
[21] jaem3l/unfuck: https://github.com/jaem3l/unfuck
[22] spatie/invade: https://github.com/spatie/invade
[23] «Symfony: The Fast Track» Symfony: https://symfony.com/book
[24] Доступна сертификация по Twig 3: https://certification.symfony.com/exams/twig.html
[25] How to Build and Distribute Beautiful Command-Line Applications with PHP and Composer: https://levelup.gitconnected.com/how-to-build-and-distribute-beautiful-command-line-applications-with-php-and-composer-50b6420245f2
[26] Decoupling frontend and backend development — The easy way!: https://mrtnschndlr.medium.com/decoupling-frontend-and-backend-development-the-easy-way-5b93a6513e0d
[27] How does Symfony decide what content type to return in a response?: https://akashicseer.com/web-development/how-does-symfony-decide-what-content-type-to-return-in-a-response/
[28] Вышел Laravel 9: https://laravel.com/docs/master/releases#laravel-9
[29] Релиз Laravel 9: обзор новых функций: https://www.youtube.com/watch?v=EMecJtEgttg
[30] 9 интересных новшеств в Laravel 9: https://habr.com/ru/company/reksoft/blog/651553/
[31] What's New in Laravel 9: https://www.youtube.com/watch?v=MnSzUX7kU-E
[32] Laracasts: What's New in Laravel 9: https://laracasts.com/series/whats-new-in-laravel-9
[33] Jeffrey Way: https://twitter.com/jeffrey_way
[34] на YouTube (45 минут): https://www.youtube.com/watch?v=GwunZ5sH2P8
[35] illuminate/collections: https://github.com/illuminate/collections
[36] работает в PhpStorm: https://laravel.com/docs/master/releases#improved-collections-ide-support
[37] Laracon Online Winter '22: https://www.youtube.com/watch?v=0Rq-yHAwYjQ
[38] про Laravel 9 и про Nova 4: https://www.youtube.com/watch?v=0Rq-yHAwYjQ&t=21680s#:~:text=05%3A04%3A46
[39] Web3 на Laravel: https://www.youtube.com/watch?v=0Rq-yHAwYjQ&t=14048s
[40] обзор Laracon online winter 2022: https://www.youtube.com/watch?v=wS7fYSiPb5E
[41] hmones/laravel-digest: https://github.com/hmones/laravel-digest
[42] ellgreen/laravel-loadfile: https://github.com/ellgreen/laravel-loadfile
[43] LOAD DATA: https://dev.mysql.com/doc/refman/8.0/en/load-data.html
[44] worksome/envy: https://github.com/worksome/envy
[45] Пост: https://downing.tech/posts/keeping-your-envexample-file-updated
[46] Как найти самые медленные запросы в Laravel приложении: https://laravel.demiart.ru/how-to-find-the-slowest-queries/
[47] Yii 2.0.45: https://www.yiiframework.com/news/443/yii-2-0-45
[48] Yii Runner: https://github.com/yiisoft/yii-runner
[49] Yii Console Runner: https://github.com/yiisoft/yii-runner-console
[50] Yii HTTP Runner: https://github.com/yiisoft/yii-runner-http
[51] Yii RoadRunner Runner: https://github.com/yiisoft/yii-runner-roadrunner
[52] Как помочь с релизом Yii 3: https://telegra.ph/Kak-pomoch-s-relizom-Yii3-02-14
[53] Сергею Предводителеву: https://github.com/vjik
[54] О разных типах событий в событийных (event-driven) системах: https://blog.frankdejonge.nl/the-different-types-of-events-in-event-driven-systems/
[55] All the Dynamic Syntaxes in PHP: https://www.exakat.io/en/all-the-dynamic-syntaxes-in-php/
[56] Service locator: an anti-pattern: https://stitcher.io/blog/service-locator-anti-pattern
[57] fromName для enum: https://t.me/phpyh/284
[58] Курс по принципам SOLID на примере Laravel от CutCode: https://solid.cutcode.ru/
[59] Фонд PHP: https://opencollective.com/phpfoundation
[60] Вывернутый SOLID: https://leonidchernenko.ru/solid-inside-out/
[61] SRP или DRY?: https://otis22.github.io/srp/dry/2022/02/14/SRP-or-DRY.html
[62] Shopware получили $100 млн инвестиций от PayPal и Carlyle: https://techcrunch.com/2022/02/08/shopware-an-e-commerce-platform-that-powers-100k-brands-raises-its-first-outside-funding-100m-from-paypal-and-carlyle/
[63] $130 млн получили Spryker: https://techcrunch.com/2020/12/17/spryker-raises-130m-at-a-500m-valuation-to-provide-b2bs-with-agile-e-commerce-tools/
[64] Чем запомнился 2021 год русскоязычному PHP-сообществу — в 3000+ ответах: https://www.youtube.com/watch?v=Nx39a7n9KIQ
[65] Что смотрели и читали по PHP в 2021: список от сообщества: https://habr.com/ru/company/skyeng/blog/648669/
[66] указали: https://twitter.com/dabernathy89/status/1494325995855179776
[67] PHP Digest: https://t.me/phpdigest
[68] личку хабра: https://habrahabr.ru/conversations/pronskiy/
[69] телеграм: https://t.me/pronskiy
[70] через форму: https://bit.ly/php-digest-add-link
[71] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[72] Предыдущий выпуск: PHP-Дайджест № 221: https://habr.com/ru/post/650145/
[73] Источник: https://habr.com/ru/post/652753/?utm_source=habrahabr&utm_medium=rss&utm_campaign=652753
Нажмите здесь для печати.