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

Свежая подборка со ссылками на новости и материалы. В выпуске: Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голосовании, порция полезных инструментов, подкасты, интервью и многое другое.
Приятного чтения!
PhpStorm 2020.1 [6]: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое.throw будет не оператором, а выражением. Это значит, что возможно будет бросать исключение в коротких лямбдах, в тернарных операторах и других конструкциях:
$callable = fn() => throw new Exception();
$foo = $bar['key'] ?? throw new KeyNotSetOnBarException();
Судя по ходу голосования [11], у него все шансы быть принятым. Также на голосование вынесен вопрос о синтаксисе: использовать <<>> или @:.
<<ExampleAttribute>>
class Foo
{
<<ExampleAttribute>>
public const FOO = 'foo';
<<ExampleAttribute>>
public $x;
<<ExampleAttribute>>
public function foo(<<ExampleAttribute>> $bar) { }
}
$object = new <<ExampleAttribute>> class () { };
<<ExampleAttribute>>
function f1() { }
$f2 = <<ExampleAttribute>> function () { };
$f3 = <<ExampleAttribute>> fn () => 1;
PHP в качестве корневого для различных внутренних сущностей, например для планируемых аттрибутов.mixed уже используется повсюду в документации.
Предлагается добавить его в PHP 8. Тип mixed будет эквивалентен объединению типов array|bool|callable|int|float|null|object|resource|string.
catch:
try {
changeImportantData();
} catch (PermissionException) { // The intention is clear: exception details are irrelevant
echo "You don't have permission to do this";
}
match, которое лишено всех недостатков switch, таких как отсутствие проверки типа и возможности возвращать значение. Также в будущем оно может быть дополнено до полноценного паттерн-мэтчинга.
match ($condition) {
1 => {
foo();
bar();
},
2 => baz(),
}
$expressionResult = match ($condition) {
1, 2 => foo(),
3, 4 => bar(),
default => baz(),
};
|> для последовательного вызова функций c передачей результата предыдущей в качестве аргумента следующей. Семантика полностью копирует реализации в Elixir / JS и от первого варианта [20] (Hack) отличается отсутствием магии использования метки $$.
$result = "Hello World"
|> 'htmlentities'
|> 'explode'
|> fn($x) => array_map(fn($v) => 'strtoupper', $x)
|> fn($x) => array_filter(fn($v) => $v != 'O');
Как переиспользовать код с бандлами Symfony 5? Часть 1. Минимальный бандл [33].
Правильная регистрация консольных команд Symfony в DI [34].
Продвинутая система авторизации действий с ресурсами в Laravel. Часть 1. Модель, Контроллер [40], Часть 2. Шлюзы, Политики [41]
Doctrine ResultSetMapping на примерах [57].Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [69].
Вопросы и предложения пишите на почту [70] или в твиттер [71].
Больше новостей и комментариев в Telegram-канале PHP Digest [72].
Прислать ссылку [73]
Поиск ссылок по всем дайджестам [74]
← Предыдущий выпуск: PHP-Дайджест № 177 [75]
Автор: Роман Пронский
Источник [76]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/352336
Ссылки в тексте:
[1] PHP 7.4.5: https://www.php.net/ChangeLog-7.php#7.4.5
[2] PHP 7.3.17: https://www.php.net/ChangeLog-7.php#7.3.17
[3] PHP 7.2.30: https://www.php.net/ChangeLog-7.php#7.2.30
[4] Composer v2.0 Alpha: https://freek.dev/1637-composer-2-whats-new-and-changed
[5] в канале: https://t.me/phpdigest/137
[6] PhpStorm 2020.1: https://habr.com/ru/post/497358/
[7] PHP онлайн-митап совместно с PHPofBY: https://meetups-online.ru/php-minsk-moskva
[8] Запись прошлого раза: https://www.youtube.com/watch?v=Bxe8FQyaCBs
[9] [RFC] throw expression: https://wiki.php.net/rfc/throw_expression
[10] [RFC] Attributes v2: https://wiki.php.net/rfc/attributes_v2
[11] голосования: https://wiki.php.net/rfc/attributes_v2#voting
[12] [RFC] PHP Namespace in core: https://wiki.php.net/rfc/php-namespace-in-core
[13] [RFC] PHP Namespace Policy: https://wiki.php.net/rfc/php_namespace_policy
[14] [RFC] Mixed Type v2: https://wiki.php.net/rfc/mixed_type_v2
[15] какой-либо: https://wiki.php.net/rfc/mixed_type_v2#:~:text=the%20type%20is%20not%20currently%20expressible
[16] [RFC] non-capturing catches: https://wiki.php.net/rfc/non-capturing_catches
[17] [RFC] Match expression: https://wiki.php.net/rfc/match_expression
[18] конструкции switch в выражение: https://wiki.php.net/rfc/switch_expression
[19] [RFC] Pipe Operator v2: https://wiki.php.net/rfc/pipe-operator-v2
[20] первого варианта: https://wiki.php.net/rfc/pipe-operator
[21] [RFC] Compact Object Property Assignment: https://wiki.php.net/rfc/compact-object-property-assignment
[22] jlaswell/compote: https://github.com/jlaswell/compote
[23] repman.io: https://repman.io/
[24] глобальный прокси: https://repman.io/proxy/
[25] dantleech/what-changed: https://github.com/dantleech/what-changed
[26] maciejczyzewski/bottomline: https://github.com/maciejczyzewski/bottomline
[27] VKCOM/noverify v0.2.0: https://github.com/VKCOM/noverify/releases/tag/v0.2.0
[28] markrogoyski/math-php 1.0: https://github.com/markrogoyski/math-php
[29] @dmitrybalabka: https://twitter.com/dmitrybalabka
[30] migrify/symfony-route-usage: https://github.com/migrify/symfony-route-usage
[31] Пост: https://www.tomasvotruba.com/blog/2020/04/06/how-to-find-dead-symfony-routes/
[32] Как перенести спагетти-код в 304 контроллера на Symfony 5: https://www.tomasvotruba.com/blog/2020/04/13/how-to-migrate-spaghetti-to-304-symfony-5-controllers-over-weekend/
[33] Как переиспользовать код с бандлами Symfony 5? Часть 1. Минимальный бандл: https://habr.com/ru/post/498134/
[34] Правильная регистрация консольных команд Symfony в DI: https://medium.com/phpyh/%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D1%85-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4-%D0%B2-symfony-di-f7536c254926
[35] Неделя Symfony #694 (13-19 апреля 2020): https://symfony.com/blog/a-week-of-symfony-694-13-19-april-2020
[36] Используем event sourcing в традиционном Laravel приложении: https://freek.dev/1634-mixing-event-sourcing-in-a-traditional-laravel-app
[37] Динамические связи в Laravel с использованием подзапросов: https://reinink.ca/articles/dynamic-relationships-in-laravel-using-subqueries
[38] Как лучше передавать аргументы в middleware на Laravel: https://timacdonald.me/rethinking-laravels-middleware-argument-api/
[39] О красоте контроллеров с единственным экшном.: https://driesvints.com/blog/the-beauty-of-single-action-controllers/
[40] Часть 1. Модель, Контроллер: https://habr.com/ru/post/497220/
[41] Часть 2. Шлюзы, Политики: https://habr.com/ru/post/497834/
[42] Mohamed Said: https://twitter.com/themsaid
[43] CSRF-защита: https://www.youtube.com/watch?v=AeakMsUnOCk
[44] CORS: https://www.youtube.com/watch?v=GPuiClqA-QE
[45] аутентификация: https://www.youtube.com/watch?v=a96ogPedoO4
[46] HTTP Middleware: https://www.youtube.com/watch?v=CoqALDABZbs
[47] The Laravel Podcast – The Ethos of Laravel, with Taylor Otwell: https://laravelpodcast.com/episodes/the-ethos-of-laravel
[48] April 2020 Technical Steering Committee Meeting: https://getlaminas.org/blog/2020-04-07-tsc-meeting.html
[49] hyperf/hyperf: https://github.com/hyperf/hyperf
[50] clue/reactphp-flux: https://github.com/clue/reactphp-flux
[51] Пишем игру «змейка» на PHP: https://thephp.website/en/issue/games-with-php/
[52] joseph-montanez/raylib-php: https://github.com/joseph-montanez/raylib-php
[53] О тестировании плагинов для Composer: https://blog.cebe.cc/posts/2020-04-17/testing-composer-plugins
[54] Улучшите архитектуру с помощью CQRS: https://thephp.cc/news/2020/04/improve-design-with-cqrs
[55] Web Application Architecture: https://matthiasnoback.nl/2020/04/early-release-of-web-application-architecture-book/
[56] PHP Mentors: http://www.phpmentors.com/
[57] Doctrine ResultSetMapping на примерах: https://habr.com/ru/post/496166/
[58] PHP Internals News #49: https://phpinternals.news/49
[59] PHP Internals News #48: https://phpinternals.news/48
[60] Sara Golemon: https://github.com/sgolemon
[61] Между Скобок № 4: https://soundcloud.com/between-braces/4-mikhail-mazein-highload-na-redis-i-php
[62] Между Скобок № 3: https://soundcloud.com/between-braces/3-dmitriy-simushev-kak-perestat-boyatsya-cqrs
[63] Moreview #3 | Александр Афенов: https://www.youtube.com/watch?v=9iNGdfu33VA
[64] Moreview #2 | Александр Макаров: https://www.youtube.com/watch?v=vDdrMaxeH1M
[65] расшифровка: https://habr.com/ru/post/497616/
[66] Советы по настройке внешнего вида и навигации в PhpStorm: https://blog.jetbrains.com/phpstorm/2020/04/new-video-series-phpstorm-tips-with-christoph-rumpel/
[67] @christophrumpel: https://twitter.com/christophrumpel
[68] Визуальное восприятие кода: https://www.youtube.com/watch?v=5qRFxMCEbLs
[69] личку: https://habrahabr.ru/conversations/pronskiy/
[70] почту: mailto:roman@pronskiy.com
[71] твиттер: https://twitter.com/pronskiy
[72] PHP Digest: https://t.me/phpdigest
[73] Прислать ссылку: https://bit.ly/php-digest-add-link
[74] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[75] Предыдущий выпуск: PHP-Дайджест № 177: https://habr.com/ru/post/495838/
[76] Источник: https://habr.com/ru/post/498246/?utm_source=habrahabr&utm_medium=rss&utm_campaign=498246
Нажмите здесь для печати.