PHP-Дайджест № 165 (23 сентября – 7 октября 2019)


    Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4.0 RC3, поддержка Composer-зависимостей на GitHub, обновление стандартов PSR, RFC предложения из PHP Internals и о координации проекта PHP, порция полезных инструментов, подкасты, митапы, и многое другое.

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



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



    PHP Internals


    • [RFC] Object Initializer — Предлагается реализовать синтаксис быстрой инициализации объектов:
      Скрытый текст
      class Car
      {
        public int $yearOfProduction;
        public string $vin;
      }
      
      $car = new Car {
        yearOfProduction = 2019,
        vin = "1FTFW1CVXAFD54385",
      };
      
      $car = new Car {
        yearOfProduction = 2019,
      }; // throws RuntimeException: Initialization of Car class object failed due to missing required properties
      
      Коротко о предложении в посте автора и подробнее в подкасте audio PHP Internals News #30 с ним же.
    • [RFC] Reclassifying engine warnings — Бросаемые нотисы и ворнинги в движке PHP были пересмотрены и по результатам голосования в PHP 8.0 имеем:
      • Переменная не определена: будет бросаться Warning;
      • Обращение к несуществующему индексу в массиве: Warning;
      • Деление на ноль: Исключение, а также будет добавлена функция fdiv(), допускающая деление на ноль;
      • Невалидный аргумент в foreach(): Warning;
      • И все остальные изменения прошли голосование и приняты.
      Подробнее в подкасте audio PHP Internals News #29 c Никитой Поповым.
    • Координация проекта PHP — Пока в Internals разгорались драмы, кое-что хорошее тоже было. Dan Ackroyd создал документ, в котором описаны актуальные задачи и обсуждения проекта. Если вы хотели бы помочь PHP, но не знаете как – этот документ хорошая отправная точка.

    Инструменты


    • cycle/orm — Мощная ORM, которую можно использовать и как DataMapper и в стиле ActiveRecord. Доступна подробная документация.
    • ssx/skrub — Пакет для удаления ненужных файлов в зависимостях, может быть полезно для уменьшения Docker-образов.
    • squizlabs/PHP_CodeSniffer 3.5.0 — Обновление c полной поддержкой стандарта PSR-12.
    • infection/infection 0.14.0 — Фреймворк для мутационного тестирования. В новой версии 3 новых мутатора, улучшена производительность, снижено потребление памяти, и другие улучшения.
    • solodkiy/mysql-error-parser — Библиотека для разбора ошибок MySQL. Прислал doctorx.
    • alecrabbit/php-console-spinner — Красивые консольные спиннеры.

    Symfony



    Laravel



    Yii



    Async PHP



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



    Аудио/Видео



    Занимательное


    • ElePHPant.me — Сайт для обмена слониками.

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

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

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

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

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 9

      +2
      Спасибо! Хорошее оформление и ценная информация :)
        0
        [RFC] Object Initializer

        Судя по голосованию, его не приняли. Хотя синтаксис интересный.

          +2

          Синтаксис прямиком из C#

            +1
            предложение as is не сильно интересно и я понимаю разработчиков ядра.

            1) Есть большая проблема — бойлерплейт для DI. Это предложение от него не спасает.

            Какие именно проблемы решает это предложение (кроме ДИ) — я не понимаю. Так как примеры из самого предложения отлично решаются паттерном билдер и текучим синтаксисом.

            2) Есть классный синтаксический вариант — контекст. Когда пишешь `Math {x plus y; foo more bar}`. И имеется в виду `math.plus()` и `math.more()`. По количеству работы — тоже самое. По применимости — космос по сравнению с этим предложением.

            То есть слишком большая цена (кода в ядре и новых веток парсера) при незначительной выгоде.
              +1

              А теперь предлагаю посмотреть на код какого-нибудь JavaScript и количество вызовов структур вида {key: value}. В PHP аналогичным способом используются массивы ['key' => $val].


              Единственное отличие от описанных выше структур — это добавление типизации. Т.е. связь этих аморфных структур с классом. Т.е. не будет никаких аморфных километровых массивов, а набор строго определённых структур.


              Так что, имхо, принятие этого RFC создало бы эффект разорвавшейся бомбы для типизации DTO, настолько подобной конструкции не хватает в языке и настолько она нужна.


              P.S. В качестве альтернативной реализации можно было бы реализовать каст к классам, вроде:


              class ExampleClass
              {
                  public string $key;
              }
              
              $object = (ExampleClass)['key' => $val];
                0
                > В PHP аналогичным способом используются массивы

                как раз в ПХП этого существенно меньше чем в ЖС.

                >… RFC создало бы эффект разорвавшейся бомбы для типизации DTO

                так давайте решать главную проблему — слабый (и уже устаревший) механизм типизации а не выискивать какие-то крайние случаи.
              0
              Только не понятно зачем new в такой инициализации.
              +1

              очень круто что есть список ближайщих событий!

                0
                спасибо большое за расписание

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое