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

PHP-Дайджест № 186 (3 – 17 августа 2020)

PHP-Дайджест № 186 (3 – 17 августа 2020) - 1

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Beta 1, снова о синтаксисе атрибутов в PHP 8: #[Attr] vs @[Attr], предложение по синтаксису для BigInt, обзоры PHP 8 и много других видео, инструменты, стримы, подкасты.

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

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

PHP-Дайджест № 186 (3 – 17 августа 2020) - 3 PHP Internals

  • [RFC] Shorter Attribute Syntax Change [9] — История с синтаксисом атрибутов в PHP 8 продолжается [10]. О финальном голосовании было в канале [10], но позже оно было приостановлено из-за того, что не был соблюден регламент по 2х-недельному обсуждению.

    Tycon Andre привел [11] примеры, не очень удачного поведения варианта #[Attr] в PHP 7. C другой стороны, какая разница, если остальные варианты просто отвалятся с ошибкой парсинга?

    И сравнение синтаксисов @@Attr, #[Attr], <<Attr>> и @[Attr]:

    Скрытый текст

    @@ORMEntity
    @@ORMTable("user")
    class User
    {
        @@ORMId @@ORMColumn("integer") @@ORMGeneratedValue
        private $id;
    
        @@ORMColumn("string", ORMColumn::UNIQUE)
        @@AssertEmail(["message" => "The email '{{ value }}' is not a valid email."])
        private $email;
    }
    
    #[
      ORMEntity,
      ORMTable("user")
    ]
    class User
    {
        #[ORMId, ORMColumn("integer"), ORMGeneratedValue]
        private $id;
    
        #[ORMColumn("string", ORMColumn::UNIQUE)]
        #[AssertEmail(["message" => "The email '{{ value }}' is not a valid email."])]
        private $email;
    }
    
    @[
      ORMEntity,
      ORMTable("user")
    ]
    class User
    {
        @[ORMId, ORMColumn("integer"), ORMGeneratedValue]
        private $id;
    
        @[ORMColumn("string", ORMColumn::UNIQUE)]
        @[AssertEmail(["message" => "The email '{{ value }}' is not a valid email."])]
        private $email;
    }
    
    <<
      ORMEntity,
      ORMTable("user")
    >>
    class User
    {
        <<ORMId, ORMColumn("integer"), ORMGeneratedValue>>
        private $id;
    
        <<ORMColumn("string", ORMColumn::UNIQUE)>>
        <<AssertEmail(["message" => "The email '{{ value }}' is not a valid email."])>>
        private $email;
    }
    
    @:ORMEntity
    @:ORMTable("user")
    class User
    {
        @:ORMId @:ORMColumn("integer") @:ORMGeneratedValue
        private $id;
    
        @:ORMColumn("string", ORMColumn::UNIQUE)
        @:AssertEmail(["message" => "The email '{{ value }}' is not a valid email."])
        private $email;
    }
    
  • [RFC] Named Parameters explicit opt in [12] — Документ был переделан и теперь вместо переименования параметров предлагает лишь явно указывать, что данный параметр именованный.
    // Именованный параметр включен явно
    function callBar(Foo $:parameterName) {
        $internalName->bar();
    }
    
    $x = new Foo();
    callBar(parameterName: $x);
    
    // Параметр не именованный
    function callBar($externalName) {
        $externalName->bar();
    }
    
    $x = new Foo();
    callBar(externalName: $x); // Error: cannot call function callBar() using parameter $externalName by name.
    

    Поскольку PHP 8 уже заморожен для новых фич, то данное предложение возможно только в 8.1, да и то маловероятно.

  • [Proposal] Bigint shorthand (123n) for GMP objects [13] — Интересное предложение [14] пока без официального RFC.

    Предлагается реализовать в PHP синтаксис для больших чисел аналогичный JavaScript с добавлением в конце суффикса «n»:

    $theBiggestInt = 9007199254740991n

    При этом под капотом будет использоваться GMP. А поскольку для объектов GMP уже перегружены арифметические операторы, а также битовые и сравнения, то работа с такими числами будет прозрачной.

  • В рамках дискуссии [15] на тему улучшения интерактивного шелла PHP (php -a), предложен PR [16], который позволит задавать колбэк отрабатывающий на вывод из интерактивного шелла. Или пока можно использовать bobthecow/psysh [17].
  • cross [RFC] PHP Namespace Policy [18] — Отклонен.

PHP-Дайджест № 186 (3 – 17 августа 2020) - 5 Инструменты

  • PHPUnit 9.3 [19] — C поддержкой PHP 8 и Xdebug 3.
  • sebastianbergmann/cli-parser [20] — Микропакет для парсинга аргументов командной строки, выделенный из PHPUnit.
  • coduo/php-matcher [21] — Валидация данных по паттернам для тех, кто не хочет в регекспы.
  • phpfn/phpfn [22] — Функциональные примитивы от SerafimArts [23].
  • hidehalo/nanoid-php [24] — PHP-реализация Nanoid — безопасного URL-совместимого генератора уникальных идентификаторов.
  • woohoolabs/zen [25] — Простой PSR-11-совместимый контейнер с генератором файла предзагрузки.
  • loophp/collection [26] — Легковесные коллекции.

PHP-Дайджест № 186 (3 – 17 августа 2020) - 6 Symfony

PHP-Дайджест № 186 (3 – 17 августа 2020) - 8 Laravel

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

PHP-Дайджест № 186 (3 – 17 августа 2020) - 17 Аудио/Видео

PHP-Дайджест № 186 (3 – 17 августа 2020) - 30 Занимательное


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

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [66].
Вопросы и предложения пишите на почту [67] или в твиттер [68].

Больше новостей и комментариев в Telegram-канале PHP Digest [69].

Прислать ссылку [70]
Поиск ссылок по всем дайджестам [71]
Предыдущий выпуск: PHP-Дайджест № 185 [72]

Автор: Роман Пронский

Источник [73]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/356070

Ссылки в тексте:

[1] PHP 8.0.0 Beta 1: https://www.php.net/archive/2020.php#2020-08-06-3

[2] заканчивается: https://externals.io/message/111308

[3] список новых возможностей и изменений: https://github.com/php/php-src/blob/php-8.0.0beta1/UPGRADING

[4] PHP 7.4.9: https://www.php.net/releases/7_4_9.php

[5] 7.3.21: https://www.php.net/releases/7_3_21.php

[6] 7.2.33: https://www.php.net/releases/7_2_33.php

[7] уязвимости в phar: https://bugs.php.net/bug.php?id=79797

[8] WordPress 5.5 “Eckstine”: https://wordpress.org/news/2020/08/eckstine/

[9] [RFC] Shorter Attribute Syntax Change: https://wiki.php.net/rfc/shorter_attribute_syntax_change#voting

[10] продолжается: https://t.me/phpdigest/174

[11] привел: https://externals.io/message/111416#111508

[12] [RFC] Named Parameters explicit opt in: https://wiki.php.net/rfc/renamed_parameters

[13] [Proposal] Bigint shorthand (123n) for GMP objects: https://github.com/php/php-src/pull/5930

[14] предложение: https://externals.io/message/111372

[15] дискуссии: https://externals.io/message/111073

[16] PR: https://github.com/php/php-src/pull/5962

[17] bobthecow/psysh: https://github.com/bobthecow/psysh

[18] [RFC] PHP Namespace Policy: https://wiki.php.net/rfc/php_namespace_policy

[19] PHPUnit 9.3: https://github.com/sebastianbergmann/phpunit/blob/9.3.0/ChangeLog-9.3.md#930---2020-08-07

[20] sebastianbergmann/cli-parser: https://github.com/sebastianbergmann/cli-parser

[21] coduo/php-matcher: https://github.com/coduo/php-matcher

[22] phpfn/phpfn: https://github.com/phpfn/phpfn

[23] SerafimArts: https://habr.com/ru/users/serafimarts/

[24] hidehalo/nanoid-php: https://github.com/hidehalo/nanoid-php

[25] woohoolabs/zen: https://github.com/woohoolabs/zen

[26] loophp/collection: https://github.com/loophp/collection

[27] mrsuh/json-validation-bundle: https://github.com/mrsuh/json-validation-bundle

[28] json-schema.org: http://json-schema.org

[29] Деплоим Symfony-приложение на AWS Lambda: https://medium.com/@smaine.milianni/aws-lambda-and-symfony-6d3e9831c3cd

[30] SSR: рендеринг ReactJS приложения на бекэнде используя PHP: https://habr.com/ru/post/513682/

[31] Очереди Laravel: Запуск одной и той же джобы несколько раз.: https://divinglaravel.com/laravel-queues-in-action-running-the-same-job-multiple-times

[32] Не используйте защиту от массового присваивания в ваших моделях Laravel: https://www.youtube.com/watch?v=XNy0hldKHjM

[33] Better Laravel Way: https://www.youtube.com/playlist?list=PL1BlcTalLDBcosZR3ynk_tU80_ke1ar3s

[34] Laravel-Дайджест (10–16 августа 2020): https://habr.com/ru/post/515338/

[35] Тестирование микросервисов на PHP с помощью Codeception: https://medium.com/@docler/testing-microservices-in-php-with-codeception-94e47f22cc24

[36] Как работают статические анализаторы PHP-кода: https://www.exakat.io/from-php-code-to-static-analysis/

[37] Антипаттерны в легаси приложениях на PHP: https://adrien.poupa.fr/modernizing-a-legacy-php-application/

[38] Method fossilisation: https://www.exakat.io/en/method-fossilisation/

[39] PHP-пакеты как зависимости уровня системы: https://technex.us/2020/08/the_case_for_system_wide_dependency_injection_in_php/

[40] KPHPStorm: https://unserialize.github.io/kphpstorm/

[41] выложили код: https://github.com/vk-com/kphp-kdb

[42] github.com/unserialize/kphpstorm: https://github.com/unserialize/kphpstorm

[43] Дружественные классы в PHP: https://rmcreative.ru/blog/post/php-friendly-klassy

[44] RFC на эту тему: https://wiki.php.net/rfc/friend-classes

[45] Как создаются Highload проекты на PHP: расшифровка: https://habr.com/ru/company/ruvds/blog/514214/

[46] PHP 8: код «До» и «После» (сравнение с PHP 7.4): https://habr.com/ru/company/vdsina/blog/514512/

[47] Как я html-парсер на php писал, и что из этого вышло. Заключительная часть: https://habr.com/ru/post/505392/

[48] Запускаем php 8 с JIT через Docker за 5 минут: https://habr.com/ru/post/515216/

[49] PHP 8: Process & fixing insanity: https://www.youtube.com/watch?v=QtF2qK9QA5A

[50] George Peter Banyard: https://twitter.com/Girgias

[51] подобный доклад от Никиты Попова: https://www.youtube.com/watch?v=NbBRXwu1Md8

[52] от William Pinaud: https://www.youtube.com/watch?v=KWRv7iM1vwo

[53] Type Juggling Magic: Why PHP thinks 0 and «password» are the same: https://www.youtube.com/watch?v=-1kftH6t5VA

[54] Видеозаписи докладов Dutch PHP Conf 2020: https://www.youtube.com/playlist?list=PLV9OnTq0kQ5ygGrauB0lrIalHAupR5l8o

[55] Стрим «Примеры проектов на PHP и GO»: https://www.youtube.com/watch?v=6AhJWUTGHTo

[56] Пятиминутка PHP #82: https://5minphp.ru/episode82/

[57] Пятиминутка PHP #83: https://5minphp.ru/episode83/

[58] Подкаст Voices of the ElePHPant:: https://voicesoftheelephpant.com/2020/08/11/eighers-gonna-eight-with-sara-golemon-and-garbriel-caruso/

[59] Подкаст PHP Internals News #66: https://phpinternals.news/66

[60] использование одного токена для всего неймспейса: https://wiki.php.net/rfc/namespaced_names_as_token

[61] Подкаст PHP Internals News #65: https://phpinternals.news/65

[62] Dan Ackroyd: https://twitter.com/MrDanack

[63] www.elephpant.com: https://www.elephpant.com/

[64] автору их дизайна Vincent Pontier: https://www.jetbrains.com/lp/php-25/#e_2007_06_14

[65] shop.symfony.com: https://shop.symfony.com/collections/all

[66] личку: https://habrahabr.ru/conversations/pronskiy/

[67] почту: mailto:roman@pronskiy.com

[68] твиттер: https://twitter.com/pronskiy

[69] PHP Digest: https://t.me/phpdigest

[70] Прислать ссылку: https://bit.ly/php-digest-add-link

[71] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[72] Предыдущий выпуск: PHP-Дайджест № 185: https://habr.com/ru/post/513558/

[73] Источник: https://habr.com/ru/post/515416/?utm_source=habrahabr&utm_medium=rss&utm_campaign=515416