- PVSM.RU - https://www.pvsm.ru -
Дисклеймер: Нет, это не дайджест авторства Романа Пронского [1]. К сожалению, у меня нет достоверной информации - будет ли выходить его дайджест далее.
Однако я взял на себя смелость временно продолжить дело Романа и написать новый дайджест за тот месяц, что прошел с выхода последнего.
Если Роман сможет и захочет далее продолжать свой дайджест - он сам решит, как использовать мой текст: взять в свой проект, как его часть или нет. На всякий случай я ставлю нумерацию дайджеста через дробь. Однако не претендуя при этом на продолжение оригинального проекта.
Вышли версии PHP 8.1.4 [2], 8.0.17 [3]. Обновления в основном посвящены исправлению найденных багов.
За прошедшее время было не так много событий вокруг RFC.
https://wiki.php.net/rfc/null-false-standalone-types [4]
В этом RFC предлагается добавить в систему тайп-хинтинга PHP еще два типа: null и false. Данная возможность позволит писать примерно такой код:
class Foo {
public null $nil = null;
public function foo(null $v): null
{ /* ... */ *}
}
// В стандартной библиотеке достаточно много функций, возвращающих int|false или string|false
// Например таких:
function strpos(string $haystack, string $needle, int $offset = 0): int|false
{ /* ... */ *}
На всякий случай предлагается запретить декларацию типа ?null - видимо, от греха подальше :)
В момент, когда писалась статья, RFC находился на голосовании. Однако его принятие не вызывает никаких вопросов - результат голосования составляет 38 голосов "за" и 0 (ноль, а не null!) "против".
https://wiki.php.net/rfc/undefined_variable_error_promotion [5]
Очень интересное предложение, которое фактически сводится к запрету на использование не объявленных явно переменных в PHP.
Сейчас обращение к необъявленной ранее (например через операцию присваивания) переменной производит ошибку уровня E_WARNING, после чего значением переменной становится null, а код продолжает выполняться далее, со следующей строки.
В обсуждении будущего PHP 9 Никита Попов отмечал [6], что такое поведение - это существенная проблема: дело в том, что ошибки могут обрабатывать хэндлеры, неявно меняющие состояние виртуальной машины PHP совершенно непредсказуемым образом, в отличие от явного выброса и явной же обработки исключения.
В данном RFC предлагается заменить ошибку уровня E_WARNING на исключение класса Error. Голосование закончено, результат весьма предсказуем: 33 "за" и 8 "против", предложение будет реализовано в PHP 9.
https://wiki.php.net/rfc/sealed_classes [7]
Новая возможность языка, появление которой, если предложение будет принято, возможно уже в PHP 8.2
Вкратце: возможность для классов (и интерфейсов) ограничивать список своих наследников (и реализаторов). Проще, наверное, показать на примерах:
sealed class Foo permits Bar
{
/* ... */
}
class Bar extends Foo
{
/* обычное наследование, без особенностей */
}
class Baz extends Foo
{
/* фатальная ошибка этапа компиляции, наследование не разрешено */
}
sealed interface HasPrice permits Product, Service
{
/* ... */
}
class Product implements HasPrice
{
/* реализация интерфейса разрешена */
}
class Service implements HasPrice
{
/* реализация интерфейса разрешена */
}
class User implements HasPrice
{
/* ошибка, реализация интерфейса не разрешена! */
}
Наряду с классами и интерфейсами возможностью разрешать своё использование предлагается наделить и трейты. Можно будет указать список классов, которым будет позволено включать в себя данный трейт.
Предложение находится в стадии голосования и, в целом, за его принятие уже подано голосов больше, чем за отказ.
Представлена возможность онлайн пройти экзамен и получить сертификат по Twig 3 [8]
Книга "Symfony: The fast track" [9] обновлена и теперь базируется на версиях Symfony 5.4 и 6.0
Объявлено, что Symfony 6.1 будет требовать минимально PHP 8.1 [10]
Представлен инструмент Translation Checker [14], позволяющий находить в вашем коде фразы, не покрытые переводами
Представлен пакет Telegraph [15], упрощающий работу с Telegram: создание ботов, работа с чатами, сообщениями и API Telegram
Вышел релиз инструмента Visit [16] - клиент для просмотра HTTP-запросов и ответов в человеко-читаемом виде
Ввиду того, что сервис OpenCollective более недоступен в России, сообщество фреймворка открывает дополнительный сбор пожертвований в сервисе Boosty: https://boosty.to/yiisoft [19]
Отмечается, что разработка фреймворка замедлится из-за резкого (примерно в 5 раз) сокращения сумм пожертвований.
Дополнительная информация может быть найдена здесь [20].
php-dry [21]: библиотека для поиска дубликатов в вашем коде
sebastian/type [22]: коллекция ValueObject-обёрток над нативными типами PHP
Laravel Optikey [23]: пакет, позволяющий использовать первичные ключи типа UUID в Laravel
Image with text [24]: библиотека, включающая в себя продвинутые возможности создания текста на изображениях.
PHPIDS [25]: библиотека обнаружения атак на ваши веб-приложения
Готовимся к собеседованию по PHP: Что такое «DI», «Container», «Auto-wiring» за семь простых шагов [26]
Top PHP Web Development Trends in 2022 [28] - довольно спорная статья, утверждающая, что современные тренды в PHP это: использование версий 7.1 и 7.2 и фреймворков Laravel, CakePHP, CodeIgniter, Zend Framework.
PhpStorm, Docker and Xdebug 3 on PHP 8.1 in 2022 [29] - неплохой гайд по настройке XDebug для свежей версии PHP в контейнеризованном окружении.
The difference between Service Classes and Traits in PHP [30] - Andrew Savetchuk объясняет разницу между сервисами и трейтами в Laravel
Using PHPStan with Symfony - static analysis for better PHP code quality [31]: туториал по использованию статического анализатора PHPStan совместно с Symfony
Подготовлено при активном участии сообщества телеграм-чата "PHP Russian Talks" [32].
Замечания по текущему выпуску и предложения для следующего можете отправлять автору в личку или в указанный выше чат.
Автор: Альберт Степанцев
Источник [33]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/373629
Ссылки в тексте:
[1] Романа Пронского: https://habr.com/ru/users/pronskiy/
[2] 8.1.4: https://www.php.net/ChangeLog-8#8.1.4
[3] 8.0.17: https://www.php.net/ChangeLog-8#8.0.17
[4] https://wiki.php.net/rfc/null-false-standalone-types: https://wiki.php.net/rfc/null-false-standalone-types
[5] https://wiki.php.net/rfc/undefined_variable_error_promotion: https://wiki.php.net/rfc/undefined_variable_error_promotion
[6] отмечал: https://news-web.php.net/php.internals/116953
[7] https://wiki.php.net/rfc/sealed_classes: https://wiki.php.net/rfc/sealed_classes
[8] пройти экзамен и получить сертификат по Twig 3: https://certification.symfony.com/exams/twig.html
[9] "Symfony: The fast track": https://symfony.com/book
[10] Symfony 6.1 будет требовать минимально PHP 8.1: https://symfony.com/blog/symfony-6-1-will-require-php-8-1
[11] 6.0.6: https://symfony.com/blog/symfony-6-0-6-released
[12] 5.4.6: https://symfony.com/blog/symfony-5-4-6-released
[13] 4.4.39: https://symfony.com/blog/symfony-4-4-39-released
[14] Translation Checker: https://github.com/LarsWiegers/laravel-translations-checker
[15] Telegraph: https://github.com/def-studio/telegraph
[16] Visit: https://laravel-news.com/visit-http-cli
[17] 9.4: https://laravel-news.com/laravel-9-4-0
[18] 9.5: https://laravel-news.com/laravel-9-5-0
[19] https://boosty.to/yiisoft: https://boosty.to/yiisoft
[20] здесь: https://habr.com/ru/news/t/658379/
[21] php-dry: https://github.com/LeoVie/php-dry
[22] sebastian/type: https://github.com/sebastianbergmann/type
[23] Laravel Optikey: https://github.com/riipandi/laravel-optikey
[24] Image with text: https://github.com/nmcteam/image-with-text
[25] PHPIDS: https://github.com/PHPIDS/PHPIDS
[26] Готовимся к собеседованию по PHP: Что такое «DI», «Container», «Auto-wiring» за семь простых шагов: https://habr.com/ru/post/655399/
[27] Используем SQLite в KPHP и PHP через FFI: https://habr.com/ru/post/653677/
[28] Top PHP Web Development Trends in 2022: https://medium.com/mqos-technologies/top-php-web-development-trends-in-2022-abddc2336383
[29] PhpStorm, Docker and Xdebug 3 on PHP 8.1 in 2022: https://www.pascallandau.com/blog/phpstorm-docker-xdebug-3-php-8-1-in-2022/
[30] The difference between Service Classes and Traits in PHP: https://dev.to/andrewsavetchuk/the-difference-between-service-classes-and-traits-in-php-41jm
[31] Using PHPStan with Symfony - static analysis for better PHP code quality: https://dev.to/accesto/using-phpstan-with-symfony-static-analysis-for-better-php-code-quality-26eh
[32] "PHP Russian Talks": https://t.me/php_russian_talks
[33] Источник: https://habr.com/ru/post/657873/?utm_source=habrahabr&utm_medium=rss&utm_campaign=657873
Нажмите здесь для печати.