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

9qf8vuceswaaxxa7wlpeemzcxfo.jpeg

Фото: Иван Ганцев.

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

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

image-loader.svg Новости


  • PHP 8.1.0 RC 1


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

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

    Несколько свежих материалов:


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


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

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

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

    Еще один бэкдор был обнаружен в пакете 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.


image-loader.svg 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.

image-loader.svg Инструменты


  • 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 — Удобный инструмент для быстрого поиска кода по Гитхабу.

image-loader.svg Symfony


image-loader.svg Laravel


image-loader.svg Yii


image-loader.svg Статьи



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



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


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


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

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

© Habrahabr.ru