Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8.0 RC 3 и видеообзоры новых возможностей, Composer 2, завершение разработки Faker (теперь в новой организации), два новых RFC для PHP 8.1, порция полезных инструментов, статьи, видео с прошедших митапов.
Приятного чтения!
Новости и релизы
- PHP 8.0 RC 3 — Предпоследний релиз-кандидат перед финальным выпуском. RC 4 ожидается 12 ноября и сам релиз уже 26 ноября.
Свежие материалы по PHP 8:
- Серия видеороликов по всем новым фичам от Spatie. Также выложен на YouTube.
- Отличный обзор изменений с интерактивными демо от Marcel Pociot. Есть перевод: PHP 8 — пробуем новые возможности.
- Видеокурс по новым фичам от Marcel Pociot и BeyondCode.
- Обновление серии постов от Larry Garfield: Weak maps, FFI, JIT.
- Самые частые ошибки совместимости с PHP 8.0 и как их исправить.
- В PhpStorm 2020.3 будут доступны кастомные атрибуты для PHP 8:
#[ArrayShape]
,#[ExpectedValues]
,#[NoReturn]
,#[Pure]
,#[Deprecated]
,#[Immutable]
. Причем#[ArrayShape]
и#[Immutable]
будут работать даже с более ранними версиями PHP. - PHP 7.4.12
- PHP 7.3.24
- Composer 2 — В этом мажорном релизе:
- улучшена производительность благодаря параллельному скачиванию и установке пакетов и куче других оптимизаций;
- более понятное описание ошибок при разрешении зависимостей;
- в скрипт автозагрузки добавлен шаг проверки версии PHP и расширений (отключается добавлением
"platform-check": false
); --dry-run
флаг дляrequire
иremove
– тестовый прогон команды, чтоб увидеть, что будет в итоге;--unused
флаг дляremove
поможет удалить ненужные зависимости изvendor
, которых нет вcomposer.json
(типа purge);- и много другого.
Подробнее об изменениях можно почитать на php.watch или чуть короче в переводе на Хабре.
Чтобы обновиться на новую версию, достаточно запустить:composer self-update --2
.
- Закат PHP Faker — В PR по поддержке PHP 8 в библиотеке fzaninotto/Faker поднялся спор о том, как развивать библиотеку. В ответ автор Francois Zaninotto объявил о том, что пакет можно считать завершенным и новых релизов не будет. Передавать репозиторий другой команде он не хотел, поэтому вскоре был создан форк fakerphp/Faker, который уже совместим с PHP 8 и не поддерживает PHP 5.
Передавать права Francois Zaninotto не хотел, во-первых, потому что хочет оставить проект с 25k+ звезд на своем аккаунте. А во-вторых, потому что в прошлом был автором популярной ORM Propel. Контроль над ней он передал другому разработчику, который совершил единственную худшую стратегическую ошибку решив переписать все с нуля. Прошло 7 лет и стабильная версия Propel 2 до сих пор не вышла. Хотя это и не мешает использовать альфа-версии.
Спасибо Francois за 9 лет работы над Faker.
- PHP Russia 2020 -> PHP Russia 2021 — Конференцию перенесли на 1 марта 2021 года.
- phpcommunity.ru — PHP-сообщества в России, Беларуси, Украине.
Ближайшие митапы: Калининград, 4 ноября; Краснодар, 7 ноября; Нижний Новгород, 14 ноября.
PHP Internals
- [RFC] Short Functions — В этом RFC предлагается добавить синтаксис стрелочных функций для однострочных именованных функций и методов.
class Person { public function __construct( private string $firstName, ) {} public function getFirstName(): string => $this->firstName; }
- [RFC] Explicit octal integer literal notation — В PHP шестнадцатеричные числа записываются с префиксом
0x
, а двоичные с0b
. Восьмеричные же сейчас выбиваются из ряда и записываются с префиксом0
. Кроме неконсистентности, это может привести к проблемам при нестрогом сравнении с числовой строкой. Например,016
в десятичном представлении равно14
и в результате"016" == 016; // false
.
Предлагается для восьмеричных чисел разрешить нотацию с префиксом0o
, которая является стандартом и используется во многих других языках.0o16 === 14; // true 016 === 0o16; // true "016" == 0o16; // false
- Literal types PoC — Концепт литерального типа для PHP как в TypeScript.
function foo(): "foo"|"bar" { return "foo"; }
Литеральный тип вряд ли будет реализован в PHP, но вот есть черновик RFC с предложением алгебраического типа данных, т. е. продвинутых перечислений.
Инструменты
- Infection PHP 0.20 — В свежем обновлении фреймворка для мутационного тестирования добавлено 8 новых мутаторов и возможность автоматически добавлять комментарии прямо в PR на GitHub.
- JustSteveKing/php-sdk — Скелет для разработки PHP SDK для сервисов и API.
- Hi-Folks/rando-php — Хелпер для генерирования псевдослучайных данных с различными фильтрами:
$randomChars = Randomize::sequence()->chars()->count(10)->noDuplicates()->generate();
- voku/PHPDoctor — Проверяет файлы и директории и находит места, где не хватает деклараций типов.
- Psalm 4 — Обновление популярного статического анализатора.
- phpDocumentor v3.0.0 — Мажорное обновление инструмента для генерирования документации на основе PHPDoc.
Symfony
- A/B тесты на Symfony с помощью travaux-com/VariantRetriever.
- Неделя Symfony #722 (26 октября — 1 ноября 2020)
- Удаленное выполнение кода (RCE) на Symfony сайтах — Разбор эксплуатации уязвимости через выполнение запроса
/_fragment
и слабого/дефолтного секрета.
Laravel
- jessarcher/laravel-castable-data-transfer-object — Автоматически преобразовывает JSON-поля в DTO. Подробнее в посте.
- Collector — Плагин для PhpStorm для рефакторинга стандартных функций PHP в методы коллекций Laravel.
- spatie/laravel-route-attributes — Позволяет описывать роуты с помощью атрибутов из PHP 8.
- Нестандартный Laravel — Несколько статей с идеями по улучшению кода.
- Laravel–Дайджест (26 октября – 1 ноября 2020)
- Laravel Worldwide Meetup #4: — Ryan Chandler «GitHub Actions для Laravel разработчиков», Liam Hammett «Нетрадиционные автозагрузчики».
- Laravel Fireside — 21.10.2020 — Стрим Тейлора с ответами на вопросы.
Yii
- Обновился PhpStorm плагин Yii2 Support.
- yiisoft/security 1.0 — Еще один компонент из семейства Yii 3. Представляет набор классов для решения типичных задач, связанных с безопасностью.
Материалы для обучения
- Делаем ООП правильно. Или почему наследование — это не ООП.
- Статья от MediaWiki о важности использования пула HTTP-соединений в хайлоаде на PHP и применении envoyproxy/envoy для этого.
- Сравнение инструментов подсчета покрытия кода: Xdebug, phpdbg и PCOV.
- Как убрать лишние детали из тестов и сделать их более читаемыми.
- О разнице между Value Object и Data Transfer Object.
- Эволюция PHP — от 5.6 до 8.0 (Часть 1), (Часть 2).
- Откуда берется заголовок Content-Type: nginx + php-fpm.
Аудио/Видео
- SDCast #124 — В гостях Михаил Боднарчук, автор фреймворков для тестирования Codeception & CodeceptJS.
- Нюансы WeakReference & WeakMap на конкретном примере / Валентин Удальцов — Разбор решения задачи про утечки, опубликованной на канале Пых.
- Видеозаписи с прошедших митапов:
- Escaping from OOP boundaries — Александр Лисаченко про устройство и применение lisachenko/z-engine.
- Большие проекты, архитектура и фреймворки — Александр Макаров на NIXMultiConf #4
- Очень странные дела на PHP (Кирилл Несмеянов, PHP Russia).
- Безопасность: от принципов до особенностей PHP (Александр Макаров, Yii).
- Перенос проекта с PHP4 на PHP7 (Максим Шамаев, Skyeng).
- Переезд с PHP на Go (Илья Фроликов, Туту.ру).
- От Doctrine ORM к CQRS за 20 минут (Дмитрий Симушев, Райффайзенбанк).
- Митап ульяновского PHP-сообщества: микросервисы, автодеплой, легаси и внутрянка языка.
- Доклады от самарского PHP-сообщества: работа с таймзонами, DDD и единый формат обработки ошибок.
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 190
spasibo_kep
Спасибо за дайджест! А слона с обложки можно будет выиграть в субботу на краснодарском митапе (зрители трансляции тоже смогут поучаствовать в розыгрыше).