PHP Дайджест № 222/3 (26 марта – 25 апреля 2022)

b4371dafd968ef065700a3050f6f8cf4.jpg

Дисклеймер: Нет, это не дайджест авторства Романа Пронского. К сожалению, у меня нет достоверной информации — будет ли выходить его дайджест далее.

Однако я взял на себя смелость временно продолжить дело Романа и написать новый дайджест за тот месяц, что прошел с выхода последнего.

Если Роман сможет и захочет далее продолжать свой дайджест — он сам решит, как использовать мой текст: взять в свой проект, как его часть или нет. На всякий случай я ставлю нумерацию дайджеста через дробь. Однако не претендуя при этом на продолжение оригинального проекта.

PHP

Вышли версии PHP:

Релизы посвящены устранению обнаруженных багов.

Кроме того:

  • Одобрен стандарт PER Coding Style, который придет на смену PSR-12

  • Запущен сайт https://thephp.foundation/ На нем можно видеть — кто в данный момент спонсирует разработку PHP и в каких объемах.

RFC (Requests for Comments)

Undefined Variable Error Promotion

https://wiki.php.net/rfc/undefined_variable_error_promotion

Интересное предложение, о запрете на использование не объявленных явно переменных в PHP. Подробный рассказ о нём был в предыдущем дайджесте.

Голосование завершено, предложение принято и будет реализовано в PHP 9.

Undefined Property Error Promotion

https://wiki.php.net/rfc/undefined_property_error_promotion

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

Предлагается в случае чтения необъявленного или не созданного явно свойства объекта выдавать ошибку уровня E_WARNING.

Идет голосование, на данный момент результат таков: 18 голосов «за» и 3 голоса «против»

Typehint Array Desctructuring

https://wiki.php.net/rfc/typehint_array_desctructuring

Свежее предложение, пока что находящееся в статусе «Черновик» и не имеющее примера реализации.

Предлагается добавить возможность контроля типов в конструкцию «разборки» массива. Например так:

$data = [42, 'Example', 2002];
[int $id, string $data, int $year] = $data;

Предполагается, что такой контроль типов будет работать по той же схеме, что и, скажем, в аргументах функций: при установленной директиве «strict_types=0» скалярные типы будут приводиться, а при «strict_types=0» — строго проверяться.

Автор RFC надеется, что в случае принятия его предложения, будет открыт путь к типизированному присваиванию не только в случае разыменования массивов, но и для простых переменных, примерно в таком виде:

int $id = 42;

True type

https://wiki.php.net/rfc/true-type

Автор предложения, George Peter Banyard, предлагает ввести в систему типов, начиная с PHP 8.2, отдельный тип true. Обосновывает, в основном, уже принятым предложением о добавлении типа false и тем фактом, что введение данного типа упростит статический анализ, и позволит улучшить работу оптимизатора.

В тексте RFC приводится такой пример:

class User {
    function isAdmin(): bool
}
 
class Admin extends User
{
    function isAdmin(): true
    {
        return true;
    }
}

Readonly classes

https://wiki.php.net/rfc/readonly_classes

Логичное предложение, развивающее уже имеющийся синтаксис readonly-свойств на целые классы.

Цитата из RFC:

readonly class Test {
    public string $prop;
}

Объект такого класса нельзя будет изменить после создания (например — переприсвоить другое значение какому-либо свойству). Попытка изменения приведет к фатальной ошибке. Дополнительно следует учесть, что в подобных классах нельзя будет объявлять статические или нетипизированные свойства.

Предложение в данный момент находится на голосовании, промежуточный итог составляет 27/6 в пользу принятия.

Новости фреймворков

Symfony

Релизы

Вышли новые версии фреймворка:

Новости Symfony 6.1

В Symfony 6.1 появится возможность использования перечислений (enum) в роутах. Смотрим пример из анонса новости:

use Symfony\Component\Routing\Requirement\EnumRequirement;

// 'bar' parameter allows all values defined in the Enum
#[Route('/foo/{bar}', requirements: ['bar' => new EnumRequirement(SomeEnum::class)])]

Кроме того, добавлена возможность использовать символы UTF-8 в параметрах роутов:

use Symfony\Component\Routing\Annotation\Route;

#[Route('/blog/{föo}/{bár}', name: '...')]
public function someControllerMethod(string $föo, string $bár)
{
    // ...
}

Подробнее об этих нововведениях можно прочесть по ссылке https://symfony.com/blog/new-in-symfony-6–1-improved-routing-requirements-and-utf-8-parameters

Напомню, что Symfony 6.1 находится в стадии первой беты: https://symfony.com/blog/symfony-6–1–0-beta1-released

Другое

Laravel

Yii

Нет значимых новостей. См. статью на Хабре.

Новости одной строкой:

Вышла в свет библиотека AnourValar/office, предназначенная для работы с MS Excel из PHP. В частности библиотека умеет подставлять значения в шаблонные файлы и сохранять результат в разных форматах, включая PDF. Смотрите подробности на https://github.com/AnourValar/office/blob/master/README.md

Продолжает публиковаться серия статей «Functional Programming in PHP» автора Viktor Daróczi — интересный цикл, заслуживающий внимания.

Опубликована небезыинтересная видеоинструкция, посвященная настройке XDebug для Laravel в окружении Sail.

Richard Warepam пытается поставить точку в бесконечном споре на тему того, какие алгоритмы и в какой объеме должен знать каждый разработчик и предлагает свою версию «Шести алгоритмов, которые должен знать каждый»

Вышла версия PHPStan 1.6.0 Самое интересное в этом выпуске — аннотации для условных возвращаемых типов примерно такого вида:

/**
 * @return ($as_float is true ? float : string)
 */
function microtime(bool $as_float): string|float
...

Опубликована интересная, но не бесспорная статья об оптимизации по памяти и времени исполнения кода при использовании генераторов.

Вместо заключения

Подготовлено при активном участии сообщества телеграм-чата «PHP Russian Talks».

Замечания по текущему выпуску и предложения для следующего можете отправлять автору в личку или в указанный выше чат.

© Habrahabr.ru