- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

PHP

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

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

Кроме того:

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

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

RFC (Requests for Comments )

Undefined Variable Error Promotion

https://wiki.php.net/rfc/undefined_variable_error_promotion [7]

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

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

Undefined Property Error Promotion

https://wiki.php.net/rfc/undefined_property_error_promotion [8]

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

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

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

Typehint Array Desctructuring

https://wiki.php.net/rfc/typehint_array_desctructuring [9]

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

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

$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 [10]

Автор предложения, 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 [11]

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

Цитата из RFC:

readonly class Test {
    public string $prop;
}

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

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

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

Symfony

Релизы

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

Новости Symfony 6.1

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

use SymfonyComponentRoutingRequirementEnumRequirement;

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

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

use SymfonyComponentRoutingAnnotationRoute;

#[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 [15]

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

Другое

Laravel

Yii

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Альберт Степанцев

Источник [31]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/374888

Ссылки в тексте:

[1] Романа Пронского: https://habr.com/ru/users/pronskiy/

[2] PHP 8.1.5: https://www.php.net/ChangeLog-8.php#8.1.5

[3] PHP 8.0.18: https://www.php.net/ChangeLog-8.php#8.0.18

[4] PHP 7.4.29: https://www.php.net/ChangeLog-7.php#7.4.29

[5] PER Coding Style: https://github.com/php-fig/per-coding-style/blob/master/spec.md

[6] https://thephp.foundation/: https://thephp.foundation/

[7] https://wiki.php.net/rfc/undefined_variable_error_promotion: https://wiki.php.net/rfc/undefined_variable_error_promotion

[8] https://wiki.php.net/rfc/undefined_property_error_promotion: https://wiki.php.net/rfc/undefined_property_error_promotion

[9] https://wiki.php.net/rfc/typehint_array_desctructuring: https://wiki.php.net/rfc/typehint_array_desctructuring

[10] https://wiki.php.net/rfc/true-type: https://wiki.php.net/rfc/true-type

[11] https://wiki.php.net/rfc/readonly_classes: https://wiki.php.net/rfc/readonly_classes

[12] Symfony 6.0.7: https://symfony.com/blog/symfony-6-0-7-released

[13] Symfony 5.4.7: https://symfony.com/blog/symfony-5-4-7-released

[14] Symfony 4.4.40: https://symfony.com/blog/symfony-4-4-40-released

[15] https://symfony.com/blog/new-in-symfony-6-1-improved-routing-requirements-and-utf-8-parameters: https://symfony.com/blog/new-in-symfony-6-1-improved-routing-requirements-and-utf-8-parameters

[16] https://symfony.com/blog/symfony-6-1-0-beta1-released: https://symfony.com/blog/symfony-6-1-0-beta1-released

[17] https://symfony.com/blog/new-in-symfony-6-1-htmlsanitizer-component: https://symfony.com/blog/new-in-symfony-6-1-htmlsanitizer-component

[18] "Symfony. Быстрый старт": https://symfony.com/doc/6.0/the-fast-track/ru/index.html

[19] Laravel 9.8: https://laravel-news.com/laravel-9-8-0

[20] Laravel 9.9: https://laravel-news.com/laravel-9-9-0

[21] Laravel 9.10: https://laravel-news.com/laravel-9-10-0

[22] Laravel Nova 4: https://nova.laravel.com/releases

[23] статью на Хабре: https://habr.com/ru/post/664030/

[24] https://github.com/AnourValar/office/blob/master/README.md: https://github.com/AnourValar/office/blob/master/README.md

[25] Functional Programming in PHP: https://auxiliaire.medium.com/

[26] настройке XDebug для Laravel в окружении Sail: https://www.youtube.com/watch?v=Xgn0EtB4chc

[27] "Шести алгоритмов, которые должен знать каждый": https://medium.com/dare-to-be-better/6-algorithms-every-developer-should-know-f78b609c7e7c

[28] PHPStan 1.6.0: https://phpstan.org/blog/phpstan-1-6-0-with-conditional-return-types

[29] статья об оптимизации по памяти и времени исполнения кода при использовании генераторов: https://betterprogramming.pub/a-quick-performance-optimization-example-using-php-generators-9e71aac810e0

[30] "PHP Russian Talks": https://t.me/php_russian_talks

[31] Источник: https://habr.com/ru/post/662545/?utm_source=habrahabr&utm_medium=rss&utm_campaign=662545