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

PHP-Дайджест № 185 (20 июля – 3 августа 2020)

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 1

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Alpha 3, PhpStorm 2020.2, новый оператор ?->, снова обсуждение синтаксиса атрибутов и другие новости PHP Internals, обзор системы типов в PHP, порция полезных инструментов, видео, стримы и многое другое.

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

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 2 Новости и релизы

  • PHP 8.0.0 Alpha 3 [1] — Последний альфа-релиз из запланированных [2]. Первая бета ожидается 6 августа.
  • Релиз PhpStorm 2020.2 [3] — Объединенные типы PHP 8, новый движок потока управления, пул-реквесты GitHub, OpenAPI. По ссылке подробный разбор этих и других изменений.

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 3 PHP Internals

  • PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 4 [RFC] Shorter Attribute Syntax Change [4] — История с синтаксисом атрибутов в PHP 8 продолжается. Предыстория [5] была в канале.

    Вкратце: сначала был << >>, переголосовали за @@, а теперь новый виток обсуждений.
    У @@ были проблемы с парсером, но они решены благодаря нижеупомянутому 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] для пользователя.

  • check [RFC] Treat namespaced names as single token [11] — В PHP 8 весь неймспейс считается одним токеном. Это позволяет использовать внутри неймспейса ключевые слова, например, namespace appfunction { class Foo {} } и избавляет от потенциальных проблем обратной совместимости при введении новых ключевых слов.

    Надеюсь, вам такое не приходилось встречать, но с этим изменением неймспейсы не могут [12] содержать комментарии:

    use /** Try comments */ FullyQualified  /* in this ugly way */ SometTotallyDifferentTrait /** also after */;
  • check [RFC] Saner string to number comparisons [13] — Почти единогласно прошло предложения ломающее обратную совместимость.

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

    0 == 'foobar' теперь официально false.
    PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 7

    Это также влечет за собой изменение поведения всех операторов сравнения <=>, ==, !=, >, >=, < и <=, конструкции switch, функций типа in_array(), sort() и других.

  • check [RFC] Nullsafe operator [14] — В PHP 8 будет новый оператор nullsafe: ?->.
    C ним вместо пачки вложенных условий можно обращаться к свойству или методу с проверкой на 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]).

  • check [RFC] Allow trailing comma in closure use lists [16] — В конце списка use у замыканий в PHP 8 можно будет оставлять запятую по аналогии с тем, как это уже работает для аргументов и параметров функций.
    Скрытый текст

    
    $f = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument,
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3, // Вот тут теперь тоже можно запятую
    ) {
       ...
    };
    
  • check [RFC] Named Arguments [17] — В PHP 8 будут именованные аргументы!
    Теперь можно будет передавать значения в функцию или метод на основе имени параметра, а не только его позиции.

    htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);

    станет:

    htmlspecialchars($string, double_encode: false);

    Подробнее об именованных аргументах в посте stitcher.io/blog/php-8-named-arguments [18].

  • PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 11 [RFC] Renamed Parameters [19] — Проблема переименования параметров методов была основным камнем преткновения в обсуждении именованных аргументов. Именно ее пытается решить автор этого RFC.

    Предлагается добавить возможность указывать внутреннее и внешнее имя параметра через двоеточие:

    
    function callBar(Foo $internalName:externalName) {
        $internalName->bar();
    }
    
    $x = new Foo();
    callBar(externalName: $x);
    

    Что-то подобное [20] есть в Swift. В качестве альтернативы, возможно решение [21] в виде атрибута @@NameAlias.

  • cross [RFC] Make constructors and destructors return void [22] — Отклонен.

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 13 Инструменты

  • ramsey/conventional-commits [23] — Библиотека для валидации сообщений коммитов согласно спецификации Conventional Commits [24]. Кстати, интересная спецификация.
  • jubianchi/ppc [25] — Генератор парсеров. Альтернативное решение phplrt/phplrt [26].
  • thephpleague/mime-type-detection [27] — Мини-библиотека для определения mime-типа файла.
  • zakirullin/typed-accessor [28] — Обертка над скалярными значениями для получения данных более безопасно.
  • nette/php-generator [29] — Генератор PHP-кода с fluent-интерфейсом.

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 14 Symfony

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 15 Laravel

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 20 Материалы для обучения

PHP-Дайджест № 185 (20 июля – 3 августа 2020) - 27 Аудио/Видео

Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [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