PHP Дайджест № 198 (25 января – 8 февраля 2021)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Фото: Иван Ганцев.

Обновление стандартов PSR-6 и PSR-13, кеширование наследования в опкеш, аксессоры свойств и другие новости из PHP Internals, диалект Lisp компилируемый в PHP, а также инструменты, видео, подкасты и PHP Дайджест Live.

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



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


  • PHP 8.0.2, 7.4.15, 7.3.27
    Обновления включают пачку багфиксов и исправление уязвимости в SoapClient.

    В 7.3 только исправление уязвимости. А PHP 7.2 и более ранние версии PHP уже не поддерживаются и для них не выходят секьюрити фиксы.
  • Опубликованы обновления стандартов PSR-6 и PSR-13.
    Каждый получил по две новых версии, потому что так было определено в плане по модернизации стандартов.

    В обоих случаях первая версия добавляет типы к аргументам, а вторая к возвращаемым значениям. Ну и новые версии требуют PHP 8, потому что используют union типы и static для return type.

    Изменения в PSR-6: 1.0.0 vs 3.0.0.
    Изменения в PSR-13: 1.0.0 vs 2.0.0.

  • Developer Ecosystem 2021 — Опрос сообщества разработчиков от JetBrains
    Довольно длинный, зато включает PHP секцию. Можно посмотреть результаты по PHP прошлого года:
  • 12 февраля, 17:00Онлайн митап от ВсеИнструменты.Ру о PHP, MySQL, нагрузках, асинхронности и с крутым составом.

PHP Internals


  • [RFC] Warning for implicit float to int conversions
    PHP динамический язык, что значит он может менять тип переменной на лету. У такого подхода есть как плюсы, так и минусы.

    Например, при преобразовании вещественных чисел (float) в целые (int) тихо теряется дробная часть.
    var_dump(3.1415, (int) 3.1415);
    
    > float(3.1415)
    > int(3)
    
    3v4l.org/fP1aC

    В данном RFC предлагается бросать предупреждение, если делается такое преобразование и дробная часть у float ненулевая.
  • Inheritance Cache
    Дмитрий Стогов представил PR, в котором реализовал кеширование наследования.

    Кеш на 8% улучшает производительность «Hello World» приложения на Symfony. И чтоб получить этот прирост, ничего делать не надо будет. Просто обновить PHP и удостовериться, что включен опкеш. Браво, Дмитрий!
    Скрытый текст
    Классы PHP компилируются и кешируются в opcache, но их «связывание» происходит во время выполнения при каждом запросе. Этот процесс может потребовать проведения ряда проверок на совместимость и заимствования методов/свойств/констант из родительских классов или трейтов. Все это требует много времени, хотя результат один и тот же в каждом запросе.

    Кэш наследования выполняет «связывание» набор всех зависимых классов (родительских, интерфейсов, трейтов, тип свойств, и т.п.) один раз и сохраняет в опкеше.

    Кроме того, в рамках этого патча Дмитрий удалил ограничения для неизменяемых классов. И теперь все классы, хранящиеся в опкеше иммутабельны.
  • [RFC] Property Accessors ! ранний черновик !
    Никита создал черновик предложения по аксессорам, то есть возможности объявлять геттеры/сеттеры для каждого свойства отдельно.

    Во-первых, RFC предполагает возможность объявлять асимметричные модификаторы доступа:
    class User {
        public string $name { get; private set; }
    
        // или вот так
        public string $prop { public get; private set; }
    }
    

    Также рид-онли свойства:
    class Test {
        // Read-write property.
        public $prop { get; set; } // равносильно `public $prop;`
    
        // Read-only property.
        public $prop { get; }
    }
    

    Во-вторых, добавлять валидацию с помощью ключевого слова guard.
    class User {
        public string $name {
            guard {
                if (strlen($value) === 0) {
                    throw new ValueError("Name must be non-empty");
                }
            }
        }
    }
    

    В-третьих, ленивую инициализацию с помощью ключевого слова lazy:
    class Test {
        public string $somethingExpensive {
            lazy {
                return computeSomethingExpensive();
            }
        }
    }
    

    В 2013 году подобное предложение уже обсуждалось для PHP 5.5, но провалилось на голосовании.

    Пока это супер ранний черновик, который даже не обсуждался в Internals. На первый взгляд, предложение в текущем виде получается слишком сложным и, возможно, не стоит того. Но черновик просочился даже до публикации, так что посмотрим как он еще изменится.
  • [RFC] Fibers — Продолжается активное обсуждение файберов. Из интересного: к дискуссии подключился один из мейнтейнеров Swoole:
    Once PHP has a stack coroutine like Fiber, we can do more than what we can do now. Since we can interrupt from PHP internal functions, then we can replace all the implementation of PHP blocking functions, such as sleep(), and we can also replace php_stream so that we can change the implementation of PDO, mysqli, and phpredis into a coroutine way, and we can also make curl become a coroutine version through libcurl's support for multiplexing.
  • [RFC] Enumerations — Стартовало голосование по енамам. Подробнее о предложении можно прочитать в дайджесте №194 или посмотреть в видео дайджест-лайва.
  • [RFC] var_representation(): readable alternative to var_export() — Стартовало голосование по добавлению новой функции, которая исправляет проблемы старой var_export().
  • cross [RFC] Dump results of expressions in `php -a` — Отклонено.
  • Что нового в PHP 8.1 — Пополняющийся пост от Brent Roose. Если хочется прям все-все в подробностях, то лучше смотреть на php.watch.

    Следить за новыми RFC и ходом голосований также можно на PHP RFC Watch

Инструменты


  • vimeo/php-mysql-engine — Симулятор MySQL-запросов (движок) на чистом PHP. В посте про инструмент Matt Brown, автор Psalm, рассказывает, как внедрение этого движка ускорило запуск тестов в Vimeo в два раза.

    На стриме возник вопрос: чем это лучше использования SQLite?

    Простой бенчмарк от Валентина Удальцова (канал Пых) показывает, что инструмент Vimeo заметно медленнее, чем PDO('sqlite::memory:'):
    sqlite:           4.00 MiB  - 66 ms
    php-mysql-engine: 10.00 MiB - 330 ms
    

    Поэтому, если для приложения достаточно подмножества SQLite, то можно остановиться на нем.
  • cweagans/composer-patches — Плагин для Cоmposer, который позволяет применять патчи к зависимостям. Удобно, если ваши изменения специфичные и не имеют смысла в виде полноценного PR для пакета/фреймворка, и на целый форк не тянут.
  • OndraM/ci-detector — Позволяет определить используемый CI-сервер и получить данные о билде.
  • rakibtg/SleekDB — NoSQL база данных на PHP. Данные хранятся в JSON-документах и есть язык запросов
  • Orangesoft-Development/throttler — Балансировщик нод. Пример использования для выбора прокси для Guzzle. Прислал Александр Денисюк.
  • sunrise-php/awesome-skeleton — Микрофрейморк на компонентах для разработки микросервисов и запуске на RoadRunner или Swoole. Прислал fenric.

Symfony


  • Неделя Symfony #736 (1-7 февраля 2021)
  • Elasticsearch в Symfony – правильный путь
  • habr Symfony и Гексагональная архитектура
  • ru Настройка Github Actions для Symfony проекта

Laravel


  • В Laravel добавили параллельный запуск тестов на базе paratestphp/paratest. В тему пост про адаптацию тестов для параллельного запуска.
  • Новый релизный цикл Laravel — Мажорная версия теперь будет выходить раз в год вместо 6 месяцев. Актуальные версии и расписание есть на laravelversions.com.
  • ru Мощный Illuminate Request
  • habr Настройка Xdebug 3 для Laravel-приложения в Docker
  • habr Как подружить ltree и Laravel
  • habr Laravel–Дайджест (25 января – 7 февраля 2021)
  • video Laravel Worldwide Meetup #5: Hotwire в Laravel, мультиприложение в одной БД.

Yii


  • Свежие релизы пакетов Yii 3: yiisoft/request-body-parser, yiisoft/cache, yiisoft/arrays.

Статьи


  • Вебшел скрывался в зараженном PHP-скрипте в виде пробельных символов — Анализ бекдора, найденного на взломанном сервере.
  • Бенчмарки различных фреймворков и CMS на PHP версий 5.6, 7.* и 8.0.
  • habr Enum в PHP 8.1 — для чего нужен enum, и как реализован в PHP.
  • habr Паспортный контроль, или как сжать полтора гигабайта до 42 мегабайт.
  • habr А такой ли уж анти-паттерн этот Service Locator?

Аудио/Видео


  • videoru Почему работа с легаси может быть увлекательной — Сергей Жук из Skyeng рассказывает какие есть варианты действий, если пришел на проект с кучей легаси.
  • video О создании генеративного арта с помощью PHP и попутно о профилирования с Blackfire.io.
  • video Refactoring PHP Platform — LiveStream #3 — Летсплей от Christoph Rumpel.
  • video PHP Release Radar — Episode 3: Psalm 4 — Интервью с автором Psalm.
  • video PHP Release Radar — Episode 4: Xdebug 3 — C автором отладчика Derick Rethans.
  • video PHP Internals News podcast #73 — C Larry Garfield про енамы.
  • video PHP Internals News podcast #74 — Про файберы с автором предложения и мейнтейнером Amp – Aaron Piotrowski.

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


  • Phel — Функциональный язык программирования, который компилируется в PHP. Является диалектом Lisp и вдохновлен Clojure. Пример кода:
    Скрытый текст
    # Define a namespace
    (ns my\example)
    
    # Define a variable with name "my-name" and value "world"
    (def my-name "world")
    
    # Define a function with name "print-name" and one argument "your-name"
    (defn print-name [your-name]
      (print "hello" your-name))
    
    # Call the function
    (print-name my-name)
    



Уже пятый выпуск стрима по мотивам PHP Дайджеста будет сегодня на YouTube-канале PHP Point. Разбор новостей и ссылок из выпуска с подробностями и деталями. Новый ведущий, гость в выпуске, и по традиции конкурс со слониками.
Начало в 20:00 Москва, Минск / 19:00 Киев.



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

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

Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 197
Источник: https://habr.com/ru/post/541300/


Интересные статьи

Интересные статьи

Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4.0 RC5, Xdebug 2.8, критическая уязвимость в PHP-FPM, новости из PHP Internals, порция полезных инструментов, подкасты, стр...
Это — подборка тематических материалов, написанных нашими экспертами: статьи о борьбе с ботнетами, ошибках провайдеров при развёртке инфраструктуры, а также квантовых сетях и eSIM. ...
В нашем новом дайджесте модульная разработка, чаты и карточки, полмиллиарда на Arcade, ульи и роботележки, ярость, время, ловушки и многое другое. Подключайтесь!