PHP Дайджест № 222/3 (26 марта – 25 апреля 2022)
Дисклеймер: Нет, это не дайджест авторства Романа Пронского. К сожалению, у меня нет достоверной информации — будет ли выходить его дайджест далее.
Однако я взял на себя смелость временно продолжить дело Романа и написать новый дайджест за тот месяц, что прошел с выхода последнего.
Если Роман сможет и захочет далее продолжать свой дайджест — он сам решит, как использовать мой текст: взять в свой проект, как его часть или нет. На всякий случай я ставлю нумерацию дайджеста через дробь. Однако не претендуя при этом на продолжение оригинального проекта.
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».
Замечания по текущему выпуску и предложения для следующего можете отправлять автору в личку или в указанный выше чат.