PHP-Дайджест № 179 (21 апреля – 4 мая 2020)


    Свежая подборка со ссылками на новости и материалы. В выпуске: 4 принятых RFC предложения для PHP 8, включая атрибуты (аннотации / декораторы), порция полезных инструментов, онлайн-конференции и митапы, видео, подкасты и многое другое.

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



    Новости и релизы


    • PHP Russia Online, 13 мая — Конференция будет бесплатной благодаря Badoo. В программе запланировано 7 докладов от Chris Holland, Tobias Nyholm, Anna Filina, Markus Winand, Andreas Heigl, Антона Титова и Nicolas Grekas. Для всех докладов будет доступен поток с синхронным переводом на русский от Skyeng.
    • PHP fwdays'20 — Тоже пройдет в онлайн-формате в течение двух дней 30 и 31 мая.
    • Fwdays PHP online meetup — 19 мая 2020, 19:00–21:00 UTC+3, бесплатный онлайн-митап из двух докладов на английском.

    PHP Internals


    • [RFC] Attributes v2 — В PHP 8 будут добавлены полноценные атрибуты (аннотации / декораторы) с синтаксисом угловых скобок << >>.

      Скрытый текст
      <<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;
      

      Также будет возможность использовать атрибуты этапа компиляции. В качестве примера Benjamin Eberlei приводит атрибут <<Deprecated>>, который добавляет вызов trigger_error в тело декорируемой функции:

      <<Deprecated>>
      function test() {}
      // Deprecated: Function test is deprecated in %s
      
      <<Deprecated("use test3() instead")>>
      function test2() {}
      // Deprecated: Function test2 is deprecated use test3() instead in %s
      
    • [RFC] Allow trailing comma in parameter list — В PHP 8 можно будет использовать запятую после последнего параметра в определении функции.

      Скрытый текст
      class Uri {
          private function __construct(
              ?string $scheme,
              ?string $user,
              ?string $pass,
              ?string $host,
              ?int $port,
              string $path,
              ?string $query,
              ?string $fragment, // <-- !
          ) {
              ...
          }
      }
      
    • [RFC] Change Default PDO Error Mode — Дефолтный режим для ошибок в PDO будет установлен как PDO::ERRMODE_EXCEPTION и в случае ошибок SQL будут бросаться исключения.
    • [RFC] Stricter type checks for arithmetic/bitwise operators — Предложение принято, и в PHP 8 будет брошена ошибка TypeError, когда арифметический или побитовый оператор применяется к массиву, ресурсу или объекту.
    • [RFC] Type casting in array destructuring expressions — Отклонено.
    • [RFC] Always available JSON extension — Предлагается сделать расширение JSON всегда доступным без возможности исключить из сборки.
    • [RFC] Match expressionГолосование по добавлению выражения match склоняется в сторону отклонения в текущем виде, потому что многим не нравится возможность использовать блоки:

      match ($x) {
          0 => {
              foo();
              bar();
              baz();
          },
      }
      

      Но, поскольку до feature-freeze в PHP 8 еще три месяца, то есть шансы обновить RFC и выставить его на повторное голосование.

    Инструменты


    • Deji69/encase-matching — Паттерн-мэтчинг для PHP в виде библиотеки. На случай если RFC не пройдет и со второй попытки.
    • brick/math — Библиотека для работы с числами произвольной точности. Будет работать, даже если не уставлены GMP или BCMath, а если они есть, то выберет наиболее быструю реализацию.
    • villfa/composer-substitution-plugin — Плагин для Composer, который заменяет плейсхолдеры в секции скриптов на динамические значения.
    • async-aws/aws — Легковесная и асинхронная альтернатива официальному SDK для AWS.
    • sensiolabs-de/deptrac 0.7 — Инструмент статического анализа кода для определения зависимостей между слоями приложения.
    • rybakit/phpunit-extras — Кастомные аннотации и методы expect*() для PHPUnit, чтобы сделать тесты чище.
    • LongRunning/LongRunning — Набор мелких, но полезных решений для long-running приложений на PHP (закрытие соединений, буферов, и тп).

    Symfony



    Laravel



    Yii


    • ru Новости Yii 2020, выпуск 4.
    • yiisoft/injector — Еще один компонент из экосистемы Yii 3. PSR-11-совместимый инжектор позволяет создавать объекты вместе с зависимостями через автоподключение (autowiring).
    • bizley/yii2-migration — Генерирует миграцию на основе текущего состояния базы и предыдущих миграций. В последней версии добавлена поддержка схем PostgreSQL.
    • video Подробнейший туториал по Yii2 с нуля продолжительностью 7 часов на примере создания простого аналога YouTube.

    Async PHP



    Материалы для обучения




    Аудио/Видео



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

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

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

    Прислать ссылку
    Поиск ссылок по всем дайджестам
    Предыдущий выпуск: PHP-Дайджест № 178

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 25

      +6
      [RFC] Attributes v2 — В PHP 8 будут добавлены полноценные атрибуты (аннотации / декораторы) с синтаксисом угловых скобок << >>.

      Жаль, что @ не получилась. Выглядит как то не очень.

        +1

        На самом деле имхо выглядят оба нормально: не уродливые и логичные.
        Меня гораздо больше печалит, что дженерики и в эту мажорную версию не завезли.

          +3

          Про дженерики поддерживаю, будет зоопарк скобок если дальше завезут, ну или придется все перепиливать. А @ как мне кажется уже знакома всем и не мазолит глаз.

            +1

            Дженерики через @ сделают

            0
            Меня гораздо больше печалит, что дженерики и в эту мажорную версию не завезли.

            *пока что

            С другой стороны, в подавляющем большинстве (во всех) языков с ними проблема. Не только с типами, но и с синтаксисом. Давайте попробуем угадать по вызову какая из деклараций функций будет корректной?)
            // Вызов
            foo(new Example<A, B>($c));
            
            // Варианты:
            // 1) 
            function foo(Example $a) {}
            // 2) 
            function foo(bool $a, bool $b) {}
            
              +1
              Не вижу проблем с дженериками, есть некоторая специфика в зависимости от типа дженериков.

              Первый случай некорректен всегда, даже в java. (прим: некорректен не означает ошибку)
              Во втором случае не могу представить, как это сработает? Прототип функции имеет 2 аргумента, а передаётся 1.
                0
                Первый случай некорректен всегда, даже в java.

                Увы, пока что RFC нет, именно по-этому я в первом случае указал обобщённый тайпхинт.


                Прототип функции имеет 2 аргумента, а передаётся 1.

                Ну почему же? Первое — это выражение new Example < A, а второй — выражение B > $c. Или не так?

                  0
                  Увы, пока что RFC нет

                  Вы про какой RFC? Мы же про языки с уже добавленными дженериками говорим?

                  Первое — это выражение new Example < A

                  Ха, отличная попытка использовать пример из презентации, но нет :) Example < A имеет тип boolean, в php автобоксинга нет и new bool вывалится с ошибкой. new имеет более высокий приоритет, но мне кажется вам не удастся написать валидный php код для второго случая (как минимум — переменные должны быть с $, а константы тоже в пхп хитрые)
                    0
                    Вы про какой RFC? Мы же про языки с уже добавленными дженериками говорим?

                    Про PHP. RFC есть в драфте, но очень далёк от того за что можно начать голосовать: https://wiki.php.net/rfc/generics


                    Ха, отличная попытка использовать пример из презентации

                    Так как PHP дженерики (из реализации https://github.com/PHPGenerics/php-generics-rfc) синтаксически выглядят идентично джавовским, то это отличный пример того, почему с ними так всё долго. Подробнее, к слову, можно почерпнуть из ишью Никиты: https://github.com/PHPGenerics/php-generics-rfc/issues/45


                    но мне кажется вам не удастся написать валидный php код для второго случая

                    Ой ли? Я добавил всего лишь определения для каждой из используемых переменных/констант/классов, остальное оставил без изменений. Более того, подобный вопрос уже обсуждался (я не из головы брал: https://github.com/PHPGenerics/php-generics-rfc/issues/35). Ну и нотисы убрал, дабы ещё веселее выглядело.


                    Заголовок спойлера

                    image


                    Как говорится: Шах и мат, аметисты =)))

            0
            Вот здесь написано, что синтаксис еще будет осуджаться и есть предложение сделать через @

            Since syntax is by far the most discussed point about this RFC, we also thought of an alternative by introducing a new token for attributes (T_ATTRIBUTE) defined as @: that the parser could look for. Choice of syntax will be a secondary vote on the RFC.
            “The “Smiley” syntax uses the shorter, more familiar “at” symbol commonly seen in docblocks. The downside is that it does not permit whitespace in attribute names to allow detecting the ending of the declaration.”
              0
              Через @: и уже все обсудили и проголосовали.
                0
                Да, извините, видел уже Вы писали, пропустим мимо глаз перед тем как отправить комментарий.
            –1
            выглядит чертовски уродливо.
            интересно видеть как язык спотыкается об свои же архитектурные решения столетней давности — @ уже есть как оператор error suppression, в рфц это есть в последней части Criticism and Alternative Approaches.
            вот так думаешь это препроцессор для хтмл, а через дцать лет оказывается уже нужны аннотации )))
              +3
              интересно видеть как язык спотыкается об свои же архитектурные решения столетней давности

              Рекомендую посмотреть доклад Бреслава на эту тему. Хоть и про Джаву, но проблемы те же самые. Я раза 3-4 этот доклад пересматривал, очень крутой: www.youtube.com/watch?v=HE4yyPpUsy4
                +1
                вкусно рассказывает, спасибо
                  –1
                  и с какой целью я должен его посмотреть? чтобы с чем то смириться или поменять свою точку зрения? или перестать считать что то уродством только потому что «таков путь»? ))
                    +3
                    Я не знаю при чём тут какой-то «путь», но доклад отвечает на все вопросы почему синтаксис именно такой (в том числе и в PHP), да и в целом показывает, что сам PHP не является исключением в плане «спотыкания о свои же архитектурные решения столетней давности».
                      –3
                      все еще не понял зачем мне чей то доклад, если «почему синтаксис именно такой» уже было написано в рфц
                0
                [RFC] Type casting in array destructuring expressions — Отклонено.

                То есть перегрузки операторов ждать не стоит?
                0

                Так еще вторичное голосование будет по поводу выбора синтаксиса @: или уже все?

                0
                Материал для следующего анонса :)

                habr.com/ru/post/501722

                Only users with full accounts can post comments. Log in, please.