Подборка свежих новостей и материалов из мира PHP.
В выпуске: вышел PHP 8.1, создана организация PHP Foundation с целью развития и поддержки PHP, критическая уязвимость в doctrine/dbal, в PHP 8.2 будут объявлены устаревшими динамические свойства, вышли Symfony 6 и Symfony 5.4.
Также в выпуске полезные статьи, видео и другие новости сообщества.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
Новости
-
Вышел PHP 8.1
Основные новые возможности:- Enums они же перечисления;
- Readonly свойства;
- First-class callable — получение ссылки на любую функцию;
- Оператор new в инициализаторах (и вложенные атрибуты);
- Файберы;
- final константы в классах;
- Новый тип
never
для (не)возвращаемых значений; - Запись восьмеричных чисел с префиксом 0o;
- Оператор
...
поддерживает массивы со строковыми ключами;
В релизе Дмитрий Стогов и другие контрибьюторы сделали много улучшений по производительности.
На Symfony и Laravel прирост будет существенный (+23% к скорости на демо приложении Symfony).
На других приложениях, скорее всего, будет не так заметно. Например, на WordPress прирост будет до +3.5%
В релизе также много депрекейшнов, улучшений консистентности и обработки ошибок.
Основные депрекейшны:- Объявлено устаревшим неявное преобразование
float
вint
, где теряется дробная часть; - Для
Serializable
необходимо использовать__serialize()
/__unserialize()
; - Ограничено использование
$GLOBALS
; - Объявлено устаревшим передача значения
null
в параметры встроенных функций, которые неnullable
; - Добавлены типы для возвращаемых значений встроенных классов (и новый атрибут
#[ReturnTypeWillChange]
); - Продолжено
удаление типа resource
. Ресурсы file_info, imap FTP Connection, LDAP, PostgreSQL теперь будут объектами, соответственно finfo, IMAP\Connection, FTP\Connection, PgSql\Connection, PgSql\Result.
Еще почитать-посмотреть:- Подробно: php.watch/versions/8.1
- Коротко в видео: What's New in PHP 8.1
- Валентин Удальцов: Лайв-кодинг обзор PHP 8.1
- Видеокурс от Spatie: New features in PHP 8.1
Важно:
Активная поддержка PHP 7.4 уже закончена, то есть будут только секьюрити фиксы в течение года.
А поддержка PHP 7.3 будет полностью прекращена 6 декабря.
Обновляйтесь!
-
The New Life of PHP – The PHP Foundation
JetBrains совместно с компаниями Automattic (WordPress), Acquia (Drupal), Laravel, Private Packagist (Composer), Symfony, Zend, Craft CMS, Tideways и PrestaShop учредили некоммерческую организацию PHP Foundation, миссия которой — обеспечить долгосрочное развитие языка PHP.
Одной из причин создания организации стало изменение интересов Никиты Попова. Уже 10 лет он занимался PHP и последние 3 года работу Никиты над PHP оплачивала компания JetBrains. Кроме PHP, Никита долгое время контрибьютил в LLVM и Rust. И вот теперь решил сосредоточить свою профессиональную деятельность на LLVM и с 1 декабря Никита перейдёт на работу в другую компанию. Никита все еще будет частью PHP-сообщества, но контрибьютить будет значительно меньше.
Первичная задача фонда — трудоустроить разработчиков в режиме полного или частичного рабочего дня, которые будут заниматься ядром интерпретатора PHP в репозитории php/php-src.
Подробно об истории создания и работе фонда я рассказал на стриме: Про PHP Foundation с Романом Пронским.
Еще про фонд и историю влияния на PHP можно прочитать в посте от Joe Watkins (сделал большой вклад в создание фонда).
Поддержать фонд донатом можно по ссылке:
opencollective.com/phpfoundation
Обновления о работе будем публиковать в твиттере: @ThePHPF.
-
Composer станет еще быстрее
В ближайшем релизе будет по умолчанию включен Pool Optimizer — это заметно ускорит операции установки обновления, причем чем сложнее набор зависимостей в composer.json, тем существеннее будет прирост скорости и меньше потребление памяти.
-
[RFC] Deprecate dynamic properties
Несмотря на многочисленные споры, предложение принято с перевесом всего в два голоса 52:25!
Это значит, что в PHP 8.2 динамические (необъявленные) свойства будут объявлены устаревшими, а в PHP 9.0 они будут вовсе удалены. Подробнее в PHP Дайджесте № 215.
В тему свежая статья от Larry Garfield про споры об эволюции PHP.
-
Вышла Doctrine DBAL 3.2.0
Также обнаружена критическая SQL-инъекция в doctrine/dbal 3.0.0 — 3.1.3, стоит немедленно обновиться до 3.1.4 или новее.
-
[RFC] Readonly classes
Máté Kocsis предлагает для PHP 8.2 readonly классы. По сути, это просто класс в котором все свойства readonly и запрещены динамические свойства. То есть это небольшой синтаксический сахар для удобства.readonly class Foo { public string $prop; }
Эквивалентно:class Foo { public readonly string $prop; public function __set($name, $value) { throw new Error('Cannot create dynamic property'); } }
Инструменты
- clue/framework-x — Реактивный микро-фреймворк от создателей ReactPHP.
- marcosh/lamphpda — Набор иммутабельных структур для функционального программирования.
- web3-php/web3 — Клиент для работы с Ethereum RPC.
- SergiX44/Nutgram — Фреймворк для ботов Telegram с простым API.
- CuyZ/Valinor — Маппер данных в строго-типизированные объекты.
Symfony
-
Вышли Symfony 6.0.0, Symfony 5.4.0
Разница между ними в том, что Symfony 5.4 содержит устаревшие возможности и обратно совместим, а в Symfony 6.0 все deprecated удалены.
Что нового можно посмотреть тут symfony.com/blog/category/living-on-the-edge.
- Improve Symfony Tests Performance — Наиболее полный список практических советов для многократного уменьшения времени тестов от Макса Рафалко, автора Infection.
- Using PHP 8.1 enumerations in Symfony
- Smart-Factory фикстуры в Symfony — Cпособ организации фикстур в приложении.
- Оптимистическая блокировка коллекций Агрегата при использовании Doctrine
Laravel
- kirschbaum-development/mail-intercept — Пакет для перехвата отправляемых email в тестах.
- Bitmasking in Laravel and MySQL
- Что нового в Eloquent ORM в последних версиях Laravel.
- Build Modern Laravel Apps Using Inertia.js — Бесплатный курс на Laracasts.
- Стрим по тестированию с помощью Pest
- Using a Laravel REST API with a NextJs App — Новое видео на официальном канале Laravel.
Yii
Статьи
- Шпаргалка по современному PHP
- A long way from Monolithic to Composable Architecture — Про изменение архитектуры Magento.
- Архитектурное тестирование
- Создаём игру на KPHP с помощью FFI и SDL
- Уязвимость и баги, стоящие денег клиентам. Разбираем модуль от CS Coding для CMS CS Cart
- Аналог Moodle или как преподаватель-юрист создавал собственную систему дистанционного обучения — Познавательная серия статей о прагматичном подходе.
- Настройка PHP-FPM — Полезная заметка на канале Beer::PHP ????.
- Практики внедрения зависимостей — Мега-статья от Дмитрия Елисеева.
Аудио/Видео
- Как работает OPcache? — Свежий выпуск подкаста «Пятиминутка PHP».
- Релиз PHP 8.1, запуск PHP Foundation и истории переезда на 8.0 — Запись стрима.
Сообщество
- roberto-butti/50-drops-of-php — Бесплатная книга, в которой собраны полезные, малоизвестные, недооцененные функции или возможности PHP.
- Дайджест Joomla за 2-е полугодие 2021
- Дайджеcт новостей CycleORM
-
PHP Russia 2022 — Конференция пройдет 12 и 13 сентября в Москве.
Приём заявок открыт до 28 марта — присылайте ваши идеи докладов, наш программный комитет поможет с доработкой!
Вот как было в прошлом году: Видеоотчет о PHP Russia 2021.
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест №215
Комментарии (11)
QeqReh
01.12.2021 06:48+6Скажу не популярную вещь, но PHP становится интерпретируемой явой, с наследием в виде кривого синтаксиса и динамической типизацией. Порог вхождения при этом увеличивается, код становится менее предсказуемым.
Старые проблемы при этом остаются, например наследие стандартных функций с их анархией в параметрах и работой через poiner, почему бы не сделать обертку как в DateTime?
С такими темпами лучше мигрировать на яву.
Недавно попробовал кодить на ней и поймал себя на мысли, что код там получается предсказуемым и понятней, хоть и многословным.
Низкий порог вхождения был когда-то основной фишкой PHP. Сейчас чтоб начать писать приложения нужно знать целый кластер технологий.
Можно попробовать поучиться по старинке, но столкнешься с проблемами когда начнешь работать с продуктовым кодом.
P.S. Пишу на PHP со временен 4-й версии (начинал с того что в школьные времена писал плагины для xoops, кстати он ещё живой).
HellWalk
01.12.2021 11:08-3Низкий порог вхождения был когда-то основной фишкой PHP. Сейчас чтоб начать писать приложения нужно знать целый кластер технологий.
Зато зарплаты ниже всех))
Ну и самое забавное, что в каждой второй статье про «войти в IT» рекомендуют PHP для входа.
pronskiy Автор
01.12.2021 11:27+5Даа, в наше время трава была зеленее.
Это "непопулярное мнение" звучит приблизительно со времен PHP 5.0, вам ли не знать.
Fockker
01.12.2021 14:03+9Писание писанию рознь.
Можно 20 лет натягивать верстку на вордпресс, и в этом случае да - такие вздохи вполне оправданы.
Но я вот ещё даже на 3 версии успел прилично поработать, сессии были не частью языка, а работали через отдельную phplib. И для тех задач, с которыми приходится сталкиваться, я только приветствую все изменения. Которых, в сущности, не так много - опциональный к применению контроль типов, улучшение поддержки ООП и немного синтаксического сахара.
При этом вполне можно продолжать говнокодить и по-старинке. "Продуктовый код" о котором вы говорите - это ООП. И претензию здесь надо предъявлять не РНР, а тем людям, которые смеют на нём писать, а потом новичку приходится его учить. Ну а если никак не получается без процедур и глобальных переменных, то специалисты по вордпрессу вполне ещё востребованы.
Blumfontein
08.12.2021 06:59интерпретируемой явой ... и динамической типизацией
А чем это плохо? Статическая типизация, это конечно, хорошо, но вот без компилируемости это все "деньги на ветер" по-моему. А компилируемый язык в вебе, оно надо?
des1roer
01.12.2021 10:30Начиная с PHP 8.1.0, класс, который реализует Serializable без реализации __serialize() и __unserialize() выдаст предупреждение об устаревании. - не пугайте людей
pronskiy Автор
01.12.2021 11:36Выдаст предупреждение именно потому, что он объявлен устаревшим. __serialize() и __unserialize() можно использовать и без интерфейса Serializable.
Но согласен с вами, что формулировка была не очень. Поправил, спасибо!
iRedds
Интересно, кто победит. readonly class VS #[AllowDynamicProperties]