PHP Дайджест № 211 (1 – 13 сентября 2021)

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

Подборка свежих новостей и материалов из мира PHP. Вышел первый релиз-кандидат PHP 8.1, в Packagist обнаружено два зловредных пакета, а репозиторий популярного пакета AliceBundle пропал с GitHub. Для PHP 8.2 предложены два новых RFC: про $this в качесвте тайпхинта для возвращаемых значений, и про удалений старых видов колбэков. Также в выпуске порция полезных инструментов, статьи и видео.

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

Новости


  • PHP 8.1.0 RC 1


    До финального релиза еще два с половиной месяца и как минимум 5 релиз-кандидатов. Подготовка идет полным ходом, и многие крупные open-source проекты работают над совместимостью.

    Вот микро-инструкция по установке PHP 8.1 на macOS через brew. Есть готовые Docker-образы с PHP 8.1.

    Несколько свежих материалов:
    • habr Удобная и долгожданная: поддержка enum в PHP 8.1
    • PHP 8.1: readonly properties

    Наиболее подробно про то, что будет в PHP 8.1, можно посмотреть на php.watch/versions/8.1 и в блоге у Брента stitcher.io/blog/new-in-php-81.

  • Вредоносные пакеты Composer


    На Packagist был пакет symfont/process, который при установке делал все то же самое, что и symfony/process, но только еще отправлял информацию о машине третьей стороне и открывал веб-шелл.

    Расчет был на то, что можно опечататься и написать symfont вместо simfony при установке.

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

    Еще один бэкдор был обнаружен в пакете laraveli/qr-code. Как видно из кода, малварь копировала на машину вот такой вебшел.

    Будьте внимательны при установке composer-пакетов!
    Чтобы защититься от подобных проблем, стоит как минимум добавить в свой CI-пайплайн запуск local-php-security-checker или готовый GitHub Action the-php-security-checker.

    Для более сложных случаев можно добавить запуск сканера marcocesarato/PHP-Antimalware-Scanner.

  • Пропал hautelook/alice-bundle


    Репозиторий пакета hautelook/alice-bundle удален с Гитхаба.
    У пакета 8 млн загрузок и главный контрибьютор не в курсе почему его удалили из списка мейнтейнеров, а репозиторий, по-видимому, сделали приватным.

    Рабочий форк доступен на Гитхабе у автора: theofidry/AliceBundle.

PHP Internals


  • [RFC] $this return type


    Никита выдвинул на обсуждение идею использовать $this как тип возвращаемого значения. При этом интерпретатор проверит, что возвращается именно тот же самый объект.

    То есть если сравнивать с self и static:
    • self — возвращаемое значение должно быть экземпляром класса, который задает данный тип;
    • static — возвращаемое значение должно быть экземпляром класса, который вызывает метод с данным объявлением типа;
    • $this — возвращаемое значение должно быть тем же экземпляром, что и экземпляр, который вызывает метод с данным объявлением типа.

    class Test {
        public function method(): $this {
            return $this;
        }
    
        public function not_this(): $this {
            return new self(); // Fatal Error
        }
    }
    

  • [RFC] Deprecate partially supported callables


    Сейчас есть несколько способов описать колбэк функцию, которые пройдут проверку на тип callable, через вызов is_callable() и в качестве аргумента call_user_func(). Но при этом вызвать их как обычную анонимную функцию $callable() не получится.

    Предлагается задепрекейтить такие не консистентные варианты:
    "self::method"
    "parent::method"
    "static::method"
    ["self", "method"]
    ["parent", "method"]
    ["static", "method"]
    ["Foo", "Bar::method"]
    [new Foo, "Bar::method"]
    

    Нормальные вызовы вида "function", "Foo::method", ["Foo", "method"] и [new Foo, "method"] не затронуты этим предложением. Потому что для них вызов через скобки сработает:
    class Foo {
        function method() {
            echo 'method';
        }
    }
    [new Foo, "method"]();
    // > method
    

  • Alias stdClass to DynamicObject?


    В контексте удаления динамических (несуществующих) свойств появилась идея переименовать класс stdClass в DynamicObject (сделать алиас). Потому что так его предназначение будет понятно из названия.

  • Все RFC на GitHub


    В качестве эксперимента Ben Ramsey, релиз-менеджер PHP 8.1, экспортировал в Git все (838) когда-либо обсуждавшиеся RFC, включая историю изменений для каждого RFC.


Инструменты


  • phabelio/phabel — Транспайлер для PHP. Позволяет использовать фичи из последних версий PHP в более старых окружениях или когда нужно поддерживать обратную совместимость. Также можно делать поддержку несуществующих фич, например, ключевых слов async/await.

    Подобные инструменты уже были раньше, например marcioAlmada/yay или preprocess.io. А делать бэкпорты умеет и Rector. Но фишка Phabel в прозрачной интеграции с Сomposer.
  • VKCOM/noverify — Быстрый статический анализатор и линтер для PHP-проектов реализованный на Go. Добавлена поддержка PHP 8 и теперь его можно поставить через Composer.
  • koriym/Koriym.Attributes — Простой инструмент позволяет читать PHPDoc аннотации doctrine/annotations и атрибуты PHP 8 через единый интерфейс. Для тех же задач есть более продвинутый spiral/attributes.
  • niklongstone/regex-reverse — Генерирует случайную строку, которая удовлетворяет заданному регулярному выражению.
  • Innmind/Immutable — Довольно интересная иммутабельная реализация примитивов: Sequence, Set, Map, Str, RegExp.
  • grep.app — Удобный инструмент для быстрого поиска кода по Гитхабу.


Symfony


  • Полное руководство по компонентам Symfony — Когда и какие стоит использовать в своих проектах. Прислал Askew.
  • Как динамически проверить некоторые данные с помощью Symfony Validator.
  • Хелперы для тестирования ваших приложений на компонентах Symfony: zenstruck/mailer-test, zenstruck/console-test, zenstruck/messenger-test, zenstruck/browser.
  • lexik/LexikTranslationBundle — Позволяет импортировать переводы в базу и предоставляет интерфейс для их удобного редактирования. Прислал @dmitrybalabka.
  • В Symfony плагине для PhpStorm добавлена поддержка PHP 8 атрибутов для метаданных Doctrine:


Laravel


  • lepikhinb/laravel-fluent — Позволяет явно декларировать аттрибуты Eloquent-моделей как свойства класса, в том числе связи. А также позволяет приводить типы с помощью аннотаций, вместо определения в $castAttributes. Благодаря этому модели выглядят чище и не требуют генерации PHPDoc для подсказок от IDE.
  • habr Локализация Laravel nova или как сломать себе мозг от желаний заказчика.
  • video Как тестировать формы в Laravel.
  • video Про фоновые задачи в Laravel с помощью компонента Queue — Продолжение серии видео про фреймворк для тех, кто только начинает.
  • video Создание приложения Laravel с нуля — Классный стрим от Mohamed Said, core Laravel, где он пишет приложение и комментирует свои шаги.
  • video PHP Roundtable: 10 лет Laravel с Taylor Otwell, Matt Stauffer и Eric Barnes.
  • video Обзор конференции недавно прошедшей Laracon: Часть 1 Часть 2.


Yii


  • machour/yii2-web-push-notifications — Модуль для Web Push Уведомлений.
  • mhthnz/yii2-tarantool — Коннектор позволяет использовать абстракции фреймворка TableSchema, ActiveRecord, ActiveQuery и т.п. с базой Tarantool.


Статьи


  • Несколько полезных техник для тестирования с помощью PHPUnit от Larry Garfield.
  • Совет по тестированию от Matthias Noback: Самодостаточные тесты.
  • Re: On using PSR Abstraction Ответ на упомянутую в прошлом выпуске статью Matthias Noback про использование PSR.
  • habr Как ускорить приложение за счёт PHP-FPM (няшим FPM conf)
  • Все про выражение match из PHP 8.0 — А вы знали, что можно делать вот так:
    // Pseudo-data that you might receive from the front-end.
    $options = [
        'monthly',
        'credit-card',
    ];
    
    return match ($options) {
        ['monthly', 'direct-debit'] => $this->setupDirectDebit(),
        ['yearly', 'credit-card']   => $this->takeYearlyCardPayment(),
        ['monthly', 'credit-card']  => $this->setupCardSubscription(),
    };
    



  • Шутка и баг, конечно, но все же :-)
    От версии к версии мы собираемся случайным образом изменять некоторые константы в PHP, чтобы никто не полагался на захардкоженые значения.



Подписывайтесь на Telegram-канал PHP Digest.

Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 210

Источник: https://habr.com/ru/post/577660/


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

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

Обычно в конце месяца мы предлагаем вам дайджест самых интересных ИБ-инцидентов. Но в феврале нам встретилось столько совершенно потрясающих историй на вечную тему «вам з...
В этом выпуске выпиливание Realm и создание виджетов, секреты приготовления BLE и уменьшения ANR в шесть раз, вопросы навигации и развития в Android-разработке, подготовка к собеседованию...
Октябрьский дайджест пока получается спокойным: по сравнению с ударным сентябрём мероприятий и курсов не так уж и много. Зато можно без спешки спланировать своё обучение и нетворкинг...
Это — тематическая подборка от «ITGLOBAL.COM» — IaaS-провайдера, IT-аутсорсера, интегратора и поставщика услуг «Managed IT». Мы представляем вашему вниманию наши первые хабратопики и материалы из...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.