Подборка свежих новостей, инструментов, видео и материалов из мира PHP.
Приятного чтения!
Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.
⚡️️ Новости
-
Официально начата работа над Coding style PER
Coding Style PER официально одобрен PHP-FIG и заменит PSR-12. Работы начаты в php-fig/per-coding-style.
Это первый документ типа PER (PHP Evolving Recommendation), то есть «живой» стандарт. Теперь не надо будет выпускать очередной PSR-стандарт каждый раз при добавлении нового синтаксиса в PHP. Вместо этого PER будет обновляться по SemVer.
Спасибо samdark.
-
2021 год в русскоговорящем PHP-сообществе
Подводим итоги 2021 года в PHP-сообществе, живая трансляция на YouTube 12 февраля 11:00 Мск/Минск, 10:00 Киев.
На стриме будут: Александр Макаров, Валентин Удальцов, Кирилл Несмеянов, Адель Файзрахманов, Дмитрий Елисеев.
-
[RFC] Remove support for libmysql from mysqli
В PHP 8.2 будет убрана поддержкаlibmysql
вmysqli
. Вряд ли это кто-то заметит, потому что по умолчанию используетсяmysqlnd
.
-
PhpStorm 2022.1 Early Access Program
Стартовала программа раннего доступа первого мажорного релиза IDE в этом году. Каждую неделю публикуем новые бесплатные для использования билды, в которых можно первым пощупать новые фичи.
Фокус релиза — багфикс и производительность, но и без новых фич не обойдется. В первом билде обновления для метадаты .phpstorm.meta.php, улучшения для редактирования Markdown и другое.
-
[RFC] final class Collections\Deque
В рамках инициативы по добавлению оптимизированных структур данных в PHP готово первое предложение.Deque
— это двухсторонняя очередь, то есть элементы можно добавлять и удалять как в начало, так и в конец.
Использовать можно везде, где былиSplQueue
илиSplDoublyLinkedList
и с ходу получить выигрыш в производительности, и уменьшить расход памяти. ТакжеDeque
актуален для долгоиграющих приложений, в которых используются большие массивы.
Есть демо на WebAssembly: PHP 8.2 Deque RFC Demo.Скрытый текст$deque = new Collections\Deque(['first', 'second', 'third']); foreach ($deque as $offset => $value) { if ($value === 'second') { $deque->shift(); } elseif ($value === 'third') { $deque->push('fourth'); } }
???? Инструменты
- sj-i/php-profiler — Сэмплирующий профайлер для PHP, который реализован на чистом PHP (FFI). Можно сгенерировать флейм-диаграммы, запустить вывод трейсов в режиме команды top и другое.
- IvanGrigorov/VMValidator — Коллекция аттрибутов-валидаторов.
- mrsuh/php-var-sizeof — Функция для получения размера памяти для любой переменной и обещает более точный результат по сравнению с memory_get_usage(). Требует PHP >=7.4 с FFI.
- spiral/framework — Релиз long-running фреймворка теперь с поддержкой RoadRunner v2 и CycleORM v2.
- Chetkov/php-clean-architecture — Инструмент для измерения качества, упрощения анализа и автоматизации контроля архитектуры приложений на PHP.
- Hi-Folks/statistics — Пакет предоставляет набор разных статистических функций: медиана, мода, отклонение выборки и т.п.
-
php-soap — В рамках организации разрабатываются инструменты для работы с SOAP. Встроенное в PHP расширение
ext-soap
давно не поддерживается, поэтому вместо него стоит использовать имплементации на чистом PHP: php-soap/ext-soap-engine. - williarin/wordpress-interop — Пакет на основе Doctrine/DBAL для более удобного доступа к базе Вордпресса из других приложений на PHP.
- Phel — Функциональный язык программирования, который компилируется в PHP. Является диалектом Lisp и вдохновлен Clojure.
- tuqqu/go-parser — Парсер Golang на PHP 8.1. Транслирует Golang-код в AST. Применение пока не ясно.
Symfony
-
Уязвимость в Symfony и конфликт версий
В Symfony версий 5.3.14, 5.4.3 и 6.0.3 была обнаружена CSRF уязвимость и срочно выпущены патчи.
Но из-за ошибки в указании версии в GitHub Advisory Database многие проекты не могли обновиться.
Спасибо chrome.
- Light Kernel для приложений на symfony/console
- 4 способа правильного внедрения сервисов в Symfony — Если хотите разобраться, как работает DI в Symfony.
- Efficient JSON Streaming with Symfony and Doctrine — Как отдавать большой JSON из API на Doctrine и Symfony. Автор делает свой велосипед, но можно использовать, например, violet-php/streaming-json-encoder.
Laravel
- nicoverbruggen/phpmon — Приложение для menu bar в mac OS для управления Laravel Valet, версиями и конфигурацией PHP.
- cerbero90/eloquent-inspector — Инспектор свойств и связей Eloquent-моделей.
-
glhd/laravel-dumper — Немного улучшений для
dd()
. - tonysm/importmap-laravel — Концепт использования Importmaps в Laravel. Позволяет не использовать билд-инструменты для JS, а просто импортировать нужные зависимости из npm в браузере.
- Safer Staging Environments with Blackhole Storage — Про использование движка BLACKHOLE в MySQL.
- Testing Laravel Environment Checks
- ???????? Руководство по обновлению до Laravel 9
- LaravelProTips.com — Сайт с подборкой статей и твитов.
- ???? Laravel Worldwide Meetup: — Пара докладов про Termwind и Inertia.
- ???? Laravel Origins: The Documentary (Trailer) — Трейлер документалки про Laravel.
- ???? Тейлор отвечает на разные вопросы
???? Статьи
- Долгий путь оптимизации памяти и быстродействия композера — Подробный разбор оптимизаций в Composer.
- Организация деплоя с помощью Ansible и Github Actions
- Ускоряем array_merge()
- Потоковый HTTP ответ на PHP
-
Решаем проблему Supply Chain атак для экосистемы PHP — Интересный пост об инициативах ребяток из Paragon IE. Сейчас они работают над инструментом Gossamer для безопасного обновления приложений и зависимостей.
До этого они принеслиlibsodium
в ядро PHP, сделали Paseto — более безопасную альтернативу JWT, и другие инструменты.
- Я протестировал 4 различных сервиса сбора отчетов об ошибках для PHP: sentry.io, bugsnag.com, raygun.com, flareapp.io и выбрал Sentry.
- Статический анализ и уже выросший проект: внедрять нельзя откладывать
- ???????????? Александр Макаров: Эффективная работа с ошибками в PHP-продукте
- ???????? Заметка на канале Пых: Поиск по нескольким словам в проекте
???? Сообщество
- Mage-OS update January 2022 — После анонса форка Magento, Adobe одумались и обещают развивать опенсорсную Magento и не депрекейтить монолит. Но вот на своих ресурсах упоминать опенсорс версию не будут.
-
PHP Russia 2022 — Прием докладов открыт до 25 апреля 2022.
Если вдруг у вас доклад не вписывается в темы на сайте, но тема всё-таки про PHP или на PHP — подавайте обязательно. Мы обожаем сюрпризы.
- В PHP есть операторы с одной точкой, двумя, тремя и четырьмя. А как бы мог выглядеть с пятью?
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто напишите мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 220
Комментарии (16)
alfixer
07.02.2022 16:10Почему именно точки? Есть же другие символы.
BeMySlaveDarlin
07.02.2022 16:23Варианты с точками с меньшей вероятностью будут вызывать коллизии в легаси пхп коде.
Любые другие символы, увы, уже используются так или иначе в более сложных конструкциях и парсинг будет более сложным - следовательно скажется на производительности вм.
Вероятно еще и размеры самих символов в таблице могут иметь значение, читаемость, семантика и что там еще волнует разработчиков языков и компиляторов к ним)
alfixer
07.02.2022 17:05@,#,^,~ вроде вообще не используются.
Вероятно еще и размеры самих символов в таблице могут иметь значение, читаемость, семантика и что там еще волнует разработчиков языков и компиляторов к ним)
Не думаю, что большое количество точек позитивно скажется на читаемости.
pxz
07.02.2022 17:14+3Ну вообще, все эти символы задействованы и парсеру известны. :)
@ — Error Control Operator
# — Комментарий
^ И ~ — Побитовые операции. XOR и отрицание соответственно.
a1ez
07.02.2022 16:29По поводу структур данных.
С удивлением обнаружил что есть WeakMap, но нет WeakHashMap что сильно сужает количество кейсов для создания например кеша на основе WeakReference'ов.
Очень странное решение!
pronskiy Автор
07.02.2022 16:36А почему нельзя сделать кеш на основе WeakMap или массива WeakReference'ов? Последнее разве и не будет WeakHashMap?
a1ez
07.02.2022 16:56+1array<array-key,WeakReference<T>> -- GC будет чистить значение внутри WR, а сам массив будет расти потихоньку (если его не чистить руками, но в чём тогда смысл брать WR).
А на основе WeakMap -- там же объекты в ключах, значит идентификатор кешируемого объекта будет в значении, т.е. надо будет итерироваться чтобы найти нужное, т.е. O(n).
Ну для небольших карт это прокатит, но в целом решение не масштабируемое.
THQSql
08.02.2022 12:11+1tuqqu/go-parser — Парсер Golang на PHP 8.1. Транслирует Golang-код в AST. Применение пока не ясно.
Как вариант написание неких лямбда функций в админке, чтоб потом быстро выполнять какие-то операции. Эта библиотека может подойти для валидации кода, чтоб не запускать отдельно линтеры и билдер Go.
egor_nullptr
:.:
как-то такjoffer
а почему :.: ? Почему не ..:. , например? Любите симметрию?)