PHP Дайджест № 222/2 (22 февраля – 25 марта 2022)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

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

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

PHP

Вышли версии PHP 8.1.4, 8.0.17. Обновления в основном посвящены исправлению найденных багов.

RFC (Requests for Comments )

За прошедшее время было не так много событий вокруг RFC.

Allow null and false as stand-alone types

https://wiki.php.net/rfc/null-false-standalone-types

В этом 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!) "против".

Undefined Variable Error Promotion

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

Очень интересное предложение, которое фактически сводится к запрету на использование не объявленных явно переменных в PHP.

Сейчас обращение к необъявленной ранее (например через операцию присваивания) переменной производит ошибку уровня E_WARNING, после чего значением переменной становится null, а код продолжает выполняться далее, со следующей строки.

В обсуждении будущего PHP 9 Никита Попов отмечал, что такое поведение - это существенная проблема: дело в том, что ошибки могут обрабатывать хэндлеры, неявно меняющие состояние виртуальной машины PHP совершенно непредсказуемым образом, в отличие от явного выброса и явной же обработки исключения.

В данном RFC предлагается заменить ошибку уровня E_WARNING на исключение класса Error. Голосование закончено, результат весьма предсказуем: 33 "за" и 8 "против", предложение будет реализовано в PHP 9.

Sealed Classes

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

Новая возможность языка, появление которой, если предложение будет принято, возможно уже в 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
{
  /* ошибка, реализация интерфейса не разрешена! */
}

Наряду с классами и интерфейсами возможностью разрешать своё использование предлагается наделить и трейты. Можно будет указать список классов, которым будет позволено включать в себя данный трейт.

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

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

Symfony

  • Представлена возможность онлайн пройти экзамен и получить сертификат по Twig 3

  • Книга "Symfony: The fast track" обновлена и теперь базируется на версиях Symfony 5.4 и 6.0

  • Объявлено, что Symfony 6.1 будет требовать минимально PHP 8.1

  • Вышли версии Symfony 6.0.6, 5.4.6 и 4.4.39

Laravel

  • Представлен инструмент Translation Checker, позволяющий находить в вашем коде фразы, не покрытые переводами

  • Представлен пакет Telegraph, упрощающий работу с Telegram: создание ботов, работа с чатами, сообщениями и API Telegram

  • Вышел релиз инструмента Visit - клиент для просмотра HTTP-запросов и ответов в человеко-читаемом виде

  • Вышли версии Laravel 9.4, 9.5

Yii

Ввиду того, что сервис OpenCollective более недоступен в России, сообщество фреймворка открывает дополнительный сбор пожертвований в сервисе Boosty: https://boosty.to/yiisoft

Отмечается, что разработка фреймворка замедлится из-за резкого (примерно в 5 раз) сокращения сумм пожертвований.

Дополнительная информация может быть найдена здесь.

Инструменты и библиотеки

  • php-dry: библиотека для поиска дубликатов в вашем коде

  • sebastian/type: коллекция ValueObject-обёрток над нативными типами PHP

  • Laravel Optikey: пакет, позволяющий использовать первичные ключи типа UUID в Laravel

  • Image with text: библиотека, включающая в себя продвинутые возможности создания текста на изображениях.

  • PHPIDS: библиотека обнаружения атак на ваши веб-приложения

Интересные статьи

Хабр

  • Готовимся к собеседованию по PHP: Что такое «DI», «Container», «Auto-wiring» за семь простых шагов

  • Используем SQLite в KPHP и PHP через FFI

Другие источники

  • Top PHP Web Development Trends in 2022 - довольно спорная статья, утверждающая, что современные тренды в PHP это: использование версий 7.1 и 7.2 и фреймворков Laravel, CakePHP, CodeIgniter, Zend Framework.

  • PhpStorm, Docker and Xdebug 3 on PHP 8.1 in 2022 - неплохой гайд по настройке XDebug для свежей версии PHP в контейнеризованном окружении.

  • The difference between Service Classes and Traits in PHP - Andrew Savetchuk объясняет разницу между сервисами и трейтами в Laravel

  • Using PHPStan with Symfony - static analysis for better PHP code quality: туториал по использованию статического анализатора PHPStan совместно с Symfony

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

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

Источник: https://habr.com/ru/post/657873/


Интересные статьи

Интересные статьи

3D-рендеринг сцены из нескольких фотографий, определение глубины и освещения по фото, нейронный дизайнер интерьеров, генерация звука по видео и многое другое в октябрьской подборке. Перейти к об...
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
Посты с AMA (Ask Me Anything) выходят в последнюю пятницу каждого месяца, а значит этой инициативе уже 1.5 года. Но ещё никогда мы с вами не были в такой ситуации, как сейчас. Мы не будем говорит...
В новом дайджесте боремся с потерями пушей, разбираемся с музыкой Apple, изучаем работу звука в Android, экономим деньги при разработке игры, ищем приложение Росстата, отличаем плохой дизайн от х...