Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое.

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



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



PHP Internals


  • Создана ветка PHP-7.4, а master репозитория PHP теперь нацелен на PHP 8.0. Это значит, что работа над PHP 8.0 уже стартовала, а PHP 7.4 будет разрабатываться параллельно. Так, в PHP 8 уже удалена целая пачка устаревших возможностей.
  • [RFC] JIT — Старая идея с JIT в PHP наконец-то нашла реализацию благодаря усилиям Дмитрия Стогова. JIT реализован как независимая часть OPcache, и может быть включён/выключен даже в рантайме. В качестве целевой версии рассматривается PHP 8, но возможно включение уже в PHP 7.4 в виде экспериментальной отключенной по умолчанию фичи. По бенчмаркам Никиты Попова JIT даёт прирост 30% для PHP-Parser и около 5% для amphp/http-server. На данный момент нет поддержки Windows, что вызывает споры в Internals.
    А тем временем уже можно попробовать PHP+JIT с помощью Docker образов (спасибо @dmitrybalabka). Также в тему отличный пост о том, что значит JIT для пользователей PHP.
  • [RFC] Consistent type errors for internal functions — Еще один RFC от Никиты Попова. Предлагается сделать так, чтоб в PHP 8 все встроенные функции бросали TypeError когда переданы параметры неверного типа вместо ворнингов и возвращения null.
    Скрытый текст
    Вместо:
    var_dump(strlen(new stdClass));
    // Warning: strlen() expects parameter 1 to be string, object given
    // NULL
    

    Будет:

    declare(strict_types=1);
    var_dump(strlen(new stdClass));
    // TypeError: strlen() expects parameter 1 to be string, object given
    

  • [RFC] RFC Workflow & Voting (2019 update) — Попытка несколько ужесточить голосование по RFC и бюрократизировать процесс встретила бурю критики в Internals. Настолько, что появились альтернативные предложения. Свой же вариант Зеев Сураски пообещал переработать и учесть критику.
  • [RFC] Weak References — Предлагается добавить класс WeakReference для реализации слабых ссылок, что позволит разработчику с��хранить ссылку на объект, при этом не предотвращая его удаления сборщиком мусора. Это может быть особенно полезно для всякого рода кэшей.
  • [RFC] Allow void return type variance — Предложение реализовать возможность переопределять возвращаемый тип void в методах наследника. Появилось по следам изменения сигнатуры метода setUp() и нескольких других в PHPUnit 8.
    Скрытый текст
    class Foo {
        function method1 (): void  {}
        function method2 ()        {}
    }
     
    class Bar extends Foo {
        function method1 (): array { return []; }
        function method2 (): array { return []; }
    }
     
    class Baz extends Foo {
        function method1 ()        { return 42; }
        function method2 ()        { return 42; }
    }
    
  • [RFC] Mixed typehint — А здесь предлагается добавить тайпхинт mixed. Это позволит указать, что функция может принимать (или возвращать) значения разных типов.
  • [RFC] Annotations 2.0 — Черновик предложения по полноценным аннотациям. Ранее уже были попытки реализовать простые аннотации и атрибуты. Тем временем можно использовать отличный плагин для аннотаций в PhpStorm.

Инструменты



Symfony



Laravel



Yii



Async PHP



CMS



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



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

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

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

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