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

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

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

Новости



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




Laravel




Yii




Статьи





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



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

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

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам

Предыдущий выпуск: PHP-Дайджест № 210

Комментарии (1)


  1. masterWeber
    14.09.2021 12:11
    +1

    grep.app - просто сказка, как давно я его искал)