- PVSM.RU - https://www.pvsm.ru -
Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Alpha 3, PhpStorm 2020.2, новый оператор ?->
, снова обсуждение синтаксиса атрибутов и другие новости PHP Internals, обзор системы типов в PHP, порция полезных инструментов, видео, стримы и многое другое.
Приятного чтения!
Вкратце: сначала был << >>
, переголосовали за @@
, а теперь новый виток обсуждений.
У @@
были проблемы с парсером, но они решены благодаря нижеупомянутому RFC про неймспейсы. Тем не менее у него есть другие проблемы [5], и в качестве альтернативы предлагался вариант #[ ]
как в Rust, но и у него есть минусы [6].
Дошло до того, что рассматривается вариант переголосования за новый синтаксис и перенос атрибутов в PHP 8.1, потому что фиче-фриз для 8.0 уже 4 августа. То есть либо в PHP 8.0, но с одним из << >>
, #[]
, @@
, либо в PHP 8.1 с чем угодно.
Для последнего случая предлагаются самые разные новые варианты: @[Attribute]
, в комментарии PHPDoc с двойной собачкой /** @@MyAttribute */
, или даже маловероятный — переделать оператор подавления ошибок из @
в @@
, а одинарную @
использовать в атрибутах.
Еще забавно, что в ответ на письмо [8] Дерика об ужасности @@
, кто-то написал [9], что T_PAAMAYIM_NEKUDOTAYIM
тоже ужасен, но не тут-то было — в PHP 8 Alpha 3 он уже не отображается [10] для пользователя.
namespace appfunction { class Foo {} }
и избавляет от потенциальных проблем обратной совместимости при введении новых ключевых слов.
Надеюсь, вам такое не приходилось встречать, но с этим изменением неймспейсы не могут [12] содержать комментарии:
use /** Try comments */ FullyQualified /* in this ugly way */ SometTotallyDifferentTrait /** also after */;
В PHP 8, при сравнении чисел и строк с помощью нестрогого ==
оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.
0 == 'foobar'
теперь официально false
.
Это также влечет за собой изменение поведения всех операторов сравнения <=>
, ==
, !=
, >
, >=
, <
и <=
, конструкции switch
, функций типа in_array()
, sort()
и других.
?->
.null
.
Например, такой приватный метод с кучей условий:
private function getUserCountry(): ?string
{
$session = $this->sessionStorage->getSession();
if (null === $session) {
return null;
}
$user = $session->getUser();
if (null === $user) {
return null;
}
if (null === $user->address) {
return null;
}
return $user->address->country;
}
можно будет заменить одной строкой:
$country = $this->sessionStorage->getSession()?->getUser()?->address?->country;
Прислал Валентин Удальцов (@Пых [15]).
$f = function (
$longArgument,
$longerArgument,
$muchLongerArgument,
) use (
$longVar1,
$longerVar2,
$muchLongerVar3, // Вот тут теперь тоже можно запятую
) {
...
};
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);
станет:
htmlspecialchars($string, double_encode: false);
Подробнее об именованных аргументах в посте stitcher.io/blog/php-8-named-arguments [18].
Предлагается добавить возможность указывать внутреннее и внешнее имя параметра через двоеточие:
function callBar(Foo $internalName:externalName) {
$internalName->bar();
}
$x = new Foo();
callBar(externalName: $x);
Что-то подобное [20] есть в Swift. В качестве альтернативы, возможно решение [21] в виде атрибута @@NameAlias
.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [72].
Вопросы и предложения пишите на почту [73], в твиттер [74] или телеграм [75] pronskiy [76].
Больше новостей и комментариев в Telegram-канале PHP Digest [77].
Прислать ссылку [78]
Поиск ссылок по всем дайджестам [79]
← Предыдущий выпуск: PHP-Дайджест № 184 [80]
Автор: Роман Пронский
Источник [81]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/355585
Ссылки в тексте:
[1] PHP 8.0.0 Alpha 3: https://www.php.net/archive/2020.php#2020-07-23-1
[2] запланированных: https://wiki.php.net/todo/php80#timetable
[3] Релиз PhpStorm 2020.2: https://habr.com/ru/company/JetBrains/blog/513250/
[4] [RFC] Shorter Attribute Syntax Change: https://wiki.php.net/rfc/shorter_attribute_syntax_change
[5] Предыстория: https://t.me/phpdigest/169
[6] есть минусы: https://externals.io/message/111218#111239
[7] July 28, 2020: https://twitter.com/chris_emerson/status/1288132106745532416?ref_src=twsrc%5Etfw
[8] письмо: https://externals.io/message/111101
[9] написал: https://externals.io/message/111241
[10] уже не отображается: https://3v4l.org/guXbl#v800alpha3
[11] [RFC] Treat namespaced names as single token: https://wiki.php.net/rfc/namespaced_names_as_token
[12] не могут: https://3v4l.org/uKUKD/rfc#output
[13] [RFC] Saner string to number comparisons: https://wiki.php.net/rfc/string_to_number_comparison
[14] [RFC] Nullsafe operator: https://wiki.php.net/rfc/nullsafe_operator
[15] @Пых: https://t.me/phpyh
[16] [RFC] Allow trailing comma in closure use lists: https://wiki.php.net/rfc/trailing_comma_in_closure_use_list
[17] [RFC] Named Arguments: https://wiki.php.net/rfc/named_params
[18] stitcher.io/blog/php-8-named-arguments: https://stitcher.io/blog/php-8-named-arguments
[19] [RFC] Renamed Parameters: https://wiki.php.net/rfc/renamed_parameters
[20] подобное: https://docs.swift.org/swift-book/LanguageGuide/Functions.html#ID167
[21] решение: https://github.com/beberlei/php-src/commit/4b0a02f9c6ba579f93ec57c754fa3794a96c696b
[22] [RFC] Make constructors and destructors return void: https://wiki.php.net/rfc/make_ctor_ret_void
[23] ramsey/conventional-commits: https://github.com/ramsey/conventional-commits
[24] Conventional Commits: https://www.conventionalcommits.org/en/v1.0.0/
[25] jubianchi/ppc: https://github.com/jubianchi/ppc
[26] phplrt/phplrt: https://github.com/phplrt/phplrt
[27] thephpleague/mime-type-detection: https://github.com/thephpleague/mime-type-detection
[28] zakirullin/typed-accessor: https://github.com/zakirullin/typed-accessor
[29] nette/php-generator: https://github.com/nette/php-generator
[30] Неделя Symfony #709 (27 июля — 2 августа 2020): https://symfony.com/blog/a-week-of-symfony-709-27-july-2-august-2020
[31] Using Symfony's service iterators for secondary flows: https://timobakx.dev/php/symfony/2020/07/30/secondary-flows.html
[32] #Symfony: https://twitter.com/hashtag/Symfony?src=hash&ref_src=twsrc%5Etfw
[33] pic.twitter.com/PdwNzRrY7O: https://t.co/PdwNzRrY7O
[34] July 24, 2020: https://twitter.com/nicolasgrekas/status/1286563593098612736?ref_src=twsrc%5Etfw
[35] Секьюрити апдейт Laravel 6 и 7 : https://blog.laravel.com/laravel-cookie-security-releases
[36] butschster/LaravelCycleORM: https://github.com/butschster/LaravelCycleORM
[37] cycle/orm: https://github.com/cycle/orm
[38] как перенести легаси-приложение на Laravel: https://tighten.co/blog/converting-a-legacy-app-to-laravel/
[39] Подсистема событий как способ избавиться от задач по «допилу»: https://habr.com/ru/post/512384/
[40] Laravel-Дайджест (27 июля – 2 августа 2020): https://habr.com/ru/post/513516/
[41] Стрим с Nuno Maduro и Freek Murze: https://www.youtube.com/watch?v=KXUVnu-fTIM&t=3045
[42] Pest: https://github.com/pestphp/pest
[43] Видеозаписи Laracon EU Online 2020: https://www.youtube.com/playlist?list=PLMdXHJK-lGoAepv_7mvIEuafrtO6N-3SZ
[44] Все что необходимо знать о системе типов в PHP: https://thephp.website/en/issue/php-type-system/
[45] PHP 8: примеры кода до и после: https://stitcher.io/blog/php-8-before-and-after
[46] О проблемах покрытия кода и как его улучшить: https://doug.codes/php-code-coverage
[47] PHP: Preloading — Manual: https://www.php.net/manual/en/opcache.preloading.php
[48] Рассылка PhpStorm, But Better! #2: https://ntsanov.com/blog/phpstorm-but-better-making-it-look-pretty
[49] LearnXdebug.com: https://learnxdebug.com/
[50] Почему плохо надеяться на БД для валидации данных: https://matthiasnoback.nl/2020/07/relying-on-the-database-to-validate-your-data/
[51] Что нужно учесть при миграции с MySQL в Postgres: https://medium.com/@DonnaInsolita/%D1%87%D1%82%D0%BE-%D0%BD%D1%83%D0%B6%D0%BD%D0%BE-%D1%83%D1%87%D0%B5%D1%81%D1%82%D1%8C-%D0%BF%D1%80%D0%B8-%D0%BC%D0%B8%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D1%81-mysql-%D0%B2-postgres-c212c15e90a
[52] Пишем простейший сервис генерации заглушек изображений: https://antonshell.me/post/placeholder-service
[53] PHP Internals News Эпизод #38: предзагрузка и WeakMaps: https://habr.com/ru/company/otus/blog/512400/
[54] Порядок вычисления в PHP: https://habr.com/ru/post/511916/
[55] Уязвимости PHP-фреймворков: https://habr.com/ru/company/dsec/blog/509980/
[56] Вы уверены, что пишете объектно-ориентированный код?: https://habr.com/ru/post/511744/
[57] Подкаст PHP Internals News #63: https://phpinternals.news/63
[58] André Rømcke: https://twitter.com/andrerom
[59] предложении: https://wiki.php.net/rfc/property_write_visibility
[60] Подкаст PHP Internals News #64: https://phpinternals.news/64
[61] Benjamin Eberlei: https://twitter.com/beberlei
[62] Стрим с Дериком по работе с Xdebug: https://www.youtube.com/watch?v=qVfqfJ7-grk
[63] ХудоБедно учим онлайн с Дмитрием Елисеевым: https://www.youtube.com/watch?v=hIGmB4TmWaQ
[64] новый формат: https://habr.com/ru/post/513422/
[65] MoreView #12 | Дмитрий Елисеев: https://www.youtube.com/watch?v=3IG1WPsmxJo
[66] MoreView #13 | Валентин Удальцов: https://www.youtube.com/watch?v=LOrb3m0FQdU
[67] Поиск и устранение утечек памяти в PHP: https://www.youtube.com/watch?v=NNMp-97rk9c
[68] Пятиминутка PHP №81: https://5minphp.ru/episode81/
[69] rectorphp/rector: https://github.com/rectorphp/rector/
[70] Instagram: https://www.instagram.com/5minphp_ru/
[71] TikTok: https://www.tiktok.com/@5minphp
[72] личку: https://habrahabr.ru/conversations/pronskiy/
[73] почту: mailto:roman@pronskiy.com
[74] твиттер: https://twitter.com/pronskiy
[75] телеграм: https://t.me/pronskiy
[76] pronskiy: https://habr.com/ru/users/pronskiy/
[77] PHP Digest: https://t.me/phpdigest
[78] Прислать ссылку: https://bit.ly/php-digest-add-link
[79] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[80] Предыдущий выпуск: PHP-Дайджест № 184: https://habr.com/ru/post/511686/
[81] Источник: https://habr.com/ru/post/513558/?utm_source=habrahabr&utm_medium=rss&utm_campaign=513558
Нажмите здесь для печати.