Подборка свежих новостей и материалов из мира PHP.
В выпуске: третья альфа PHP 8.1 — список новых возможностей и статус последних предложений; readonly-свойства и проблемы с клонированием; автор Psalm покинул проект и PHP — работу подхватили другие мейнтейнеры; Laravel 9 выйдет в январе и будет требовать PHP 8.0. А также другие новости, порция полезных инструментов, статьи и видео.
Приятного чтения!
Новости
PHP 8.1.0 alpha 3
Третья и последняя альфа доставлена по расписанию. Следующим выпуском будет первая бета PHP 8.1.
Что нового будет в PHP 8.1- Enum они же перечисления RFC;
- Новый тип
never
для возвращаемых значений RFC; - Файберы RFC;
- Финальные константы в классах RFC;
- Оператор распаковки поддерживает массивы со строковыми ключами RFC;
- Объявлено устаревшим преобразование
float
вint
, где теряется дробная часть RFC; - Интерфейс
Serializable
объявлен устаревшим RFC; - Запись восьмеричных чисел с префиксом
0o
RFC; - Ограничено использование $GLOBALS RFC;
Полный список изменений можно посмотреть на php.watch или stitcher.io.
Под вопросом остаются еще следующие фичи:
[RFC] Partial Function Application— отклонен по результатам голосования;[RFC] Property Accessors— не выдвинут на голосование;- [RFC] First-class callable syntax — на голосовании и проходит;
- [RFC] Readonly properties 2.0 — проходит, подробнее ниже;
- [RFC] New in initializers — на голосовании и проходит;
- [RFC] Pipe Operator v2 — не проходит;
- [RFC] Is_literal — не проходит;
- Обновления актуальных веток: PHP 8.0.8, PHP 7.4.21, PHP 7.3.29
PHP Internals
[RFC] Readonly properties 2.0
В качестве альтернативы довольно сложному и громоздкому предложению по акссессорам свойств, Никита выдвинул на голосование RFC поreadonly
-свойствам.
Предлагается добавить модификаторreadonly
для свойств. Такие свойства нельзя будет изменить после инициализации.
class User { public function __construct( public readonly string $name ) {} } $user = new User('Nikita'); echo $user->name; // Ok $user->name = 'Roman'; // Error
Подробнее о readonly-свойствах в подкасте PHP Internals News #90 с Никитой Поповым.
Споры при голосовании разгорелись из-за того, чтоreadonly
-свойства не очень хорошо сочетаются с клонированием:
Пример:
class Point { public function __construct( public readonly float $x, ) {} public function withX(float $x): static { // Вот так сработает: return new static($x); // А вот так не будет работать: $clone = clone $this; $clone->x = $x; // Error: Cannot modify readonly property return $clone; } }
В будущем для решения этой проблемы, возможно, будет добавлена конструкцияclone with
или ассиметричные модификаторы доступа.
А пока Brent Roose из Spatie предложил трейт Cloneable.
Кстати, тот же Brent Roose отметил, что с введением readonly-свойств, кажется неплохой идеей разрешить такие свойства в интерфейсах:
interface HasUuid { public readonly string $uuid; }
Инструменты
- thecodingmachine/safe8 — Все стандартные функции PHP, обернутые так, чтобы они бросали исключения, а не возвращали
false
. - humbug/php-scoper — Инструмент добавляет префикс ко всем неймспейсам в указанной папке. Может пригодиться, когда необходимо использовать несколько версий одного пакета. Подробнее в посте.
- IvanGrigorov/VMValidator — Простой валидатор на основе атрибутов PHP 8, если вдруг вам не нравится symfony/validator.
- voku/anti-xss — Пакет для защиты от XSS с простым API.
Symfony
- Создание SaaS-продукта с помощью Symfony — Советы из личного опыта автора.
- Отладка консольных команд Symfony с Xdebug 3
- Неделя Symfony #758 (5-11 июля 2021)
Laravel
- Laravel 9 выйдет в январе 2022 (вместо ноября). Он будет основан на компонентах Symfony 6 и поэтому минимальной версией PHP для него будет 8.0.
- Алгоритмическая сложность (Big O) отношения One-Of-Many в Laravel
- Проверка тестов PHP API на соответствие определениям OpenAPI — пример Laravel
- Что нового в Laravel (#4) 2021-07-07
Async PHP
- Вышел reactphp/event-loop v1.2.0, в котором сделан дефолтный цикл событий. Начать писать асинхронные приложения на PHP стало еще чуть проще. Подробнее в анонсе.
<?php require __DIR__ . '/vendor/autoload.php'; $server = new React\Http\Server(function (Psr\Http\Message\ServerRequestInterface $request) { return new React\Http\Message\Response( 200, [ 'Content-Type' => 'text/plain' ], "Hello World!\n" ); }); $socket = new React\Socket\Server('127.0.0.1:8080'); $server->listen($socket);
Статьи
- PHP совсем не так плох? — Короткие ответы на популярные мифы о PHP в 2021.
- 12 советов по улучшению лайв кодинга
- Организация вспомогательных функций — Используем реальные классы вместо свалки статических методов.
- Статистика версий PHP: Июль, 2021 — Обновленная статистика по данным от композера. Теперь от Brent Roose вместо Jordi Boggiano.
- Мои настройки PhpStorm — Также в тему пост: Мои настройки PhpStorm после 8 лет использования.
- Валидация в приложении на PHP (часть 1 — валидация доменного слоя)
- Написание парсера DBML на PHP
- Отказоустойчивая работа с Redis
- На php тоже может быть легко и быстро
Сообщество
- Мое невероятное путешествие с PHP — Matt Brown, автор статического анализатора Psalm, покидает Vimeo, где проработал 7 лет, и не будет заниматься PHP (судя по всему, переключился на Rust). Поддержка псалма перешла на плечи Bruce Weirdan and Orklah.
- PHP fwdays'21 Online — Открыт прием заявок на доклады.
Подписывайтесь на Telegram-канал PHP Digest.
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 206
joffer
Как-то так?
Просто если "да", то я наконец-то в #2021 стал "современным РНР разработчиком"))
pronskiy Автор
Код написан не по PSR-12 так что все еще нет ??????