PHP Digest
8.52K subscribers
60 photos
3 videos
288 links
PHP Дайджест

Новости, материалы и инструменты из мира PHP — раз в месяц.

Вопросы, замечания, предложения: @pronskiy
Download Telegram
Дерик (автор Xdebug) проводит опрос о дальнейшем развитии DateTime:
https://twitter.com/derickr/status/1551611856007069696

Перевод: Сделать класс DateTime изменяемым было одной из самых больших ошибок в API модуля Date/Time.
Я думаю изменить DateTime так, чтобы он был иммутабельным по умолчанию в PHP 9 и отказаться от класса DateTimeImmutable (или сделать псевдонимом).
Вероятно, это сломает чей-то код.
July 26, 2022
August 1, 2022
August 1, 2022
August 3, 2022
August 4, 2022
Forwarded from Пых (Валентин Удальцов)
🏫 Мой продвинутый курс по PHP

Я уже пару лет мечтаю о том, чтобы масштабно и комплексно поделиться знаниями, и наконец-то мне представилась возможность записать свой продвинутый курс по PHP! Огромное спасибо Loftschool за предложение посотрудничать!

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

https://youtu.be/yMrbatAM3bw
August 4, 2022
August 5, 2022
August 25, 2022
October 5, 2022
Forwarded from Пых (Валентин Удальцов)
#[<T>] Дженерики через атрибуты

Роман Пронский в своём блоге предлагает реализовать стираемые дженерики путём расширения синтаксиса атрибутов.

Ход мысли такой. Сейчас мы описываем общие типы для Psalm и PHPStan в phpdoc-ах, то есть, по сути, и используем стираемые дженерики, только с не особо стандартизованным синтаксисом и в комментариях, КАРЛ. А ещё у нас есть атрибуты — синтаксис в PHP, предназначенный для метаинформации. Так почему бы нам не объединить две эти вещи? Так как атрибуты в текущем виде слабо подходят для типизации, Рома предлагает расширить их синтаксис, в частности, разрешить ставить атрибуты над выражениями и перед типом возвращаемого значения.

https://pronskiy.com/blog/generics-via-attributes-in-php/

Я считаю, что это интересный альтернативный взгляд на дженерики в PHP, но с ним связано несколько проблем:

1. Нарушение принципа единой отвественности для атрибутов. Мы либо получим неоднозначность в определении понятия "атрибут", либо просто дженерики с похожим синтаксисом.

2. Инстанциированные атрибуты можно получить только через рефлексию. Рефлексия — это рантайм и автолоадинг. Статанализ же в идеале вообще не должен запускать анализируемый код. Именно поэтому появились такие проекты, как PHP Parser и Better Reflection. Если же обновлённые атрибуты будут использоваться только как синтаксис, то нет смысла их называть атрибутами.

3. Приведенную в статье декларацию атрибута-дженерика над выражением вообще не получится отрефлексировать, поскольку для выражений по определению невозможна рефлексия. Из-за этого синтаксис дженериков может быть реализован только на уровне языка.

Получается, что замаскированные под атрибуты дженерики технически не смогут ими быть. Ну а в таком случае проще реализовать стираемые дженерики с привычным синтаксисом array<string, object>. Если же по каким-то техническим причинам необходимо оборачивать декларации в #[], то пусть это просто будут дженерики с таким синтаксисом.

Что касается самой концепции стираемых дженериков, я её однозначно поддерживаю. Да, такой подход требует наличия внешнего анализатора, но взамен даёт стандартизированный синтаксис, нативный парсинг кода с дженериками и популяризацию обобщённого программирования среди PHP-разработчиков.

Я очень рад, что Рома в очередной раз подогрел дискуссию вокруг дженериков. Любой подобный движ полезен для сообщества и приближает нас к результату.
November 1, 2022
November 2, 2022
Дайджест PHP – Ноябрь 2022

Подборка свежих новостей, инструментов, видео и материалов из мира PHP. Приятного чтения!

⚡️ НОВОСТИ

🔹 Вышел PHP 8.2 RC 7

В этом году добавлена ещё одна, седьмая RC-версия, выход PHP 8.2.0 GA откладывается до 8 декабря.

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

Завершение цикла PHP 7

Для PHP 7.4 больше не будут выходить обновления, релиз PHP 7.4.33 стал последним, рекомендуется обновиться до поддерживаемой версии.

🔹 Вышли PHP 8.0.26 и PHP 8.1.13

🐛 Это выпуски с исправлением ошибок.

🎂 PHP Foundation исполнился 1 год

Год назад компания JetBrains опубликовала новость о создании PHP Foundation.

За прошедший год PHP Foundation поддержал работу 6 разработчиков ядра и ежемесячно публиковал обновления в серии PHP Core Roundup.

Ознакомьтесь с отчетом фонда за 2022 год.

Поддержать PHP Foundation можно на OpenCollective.

Принят PSR-20: Clock

🔹 Группа PHP-FIG приняла PSR-20 с рекомендуемым интерфейсом ClockInterface для работы с датой и временем.

🐘 ЯДРО PHP

RFC: Randomizer Additions

RFC: Destructuring Coalesce

📣 RFC: Dynamic class constant fetch

Ilija Tovilo предложил добавить синтаксис для поиска констант класса.

📣 RFC: Arbitrary static variable initializers

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

📣 RFC: Use exceptions by default in SQLite3 extension

Предлагается постепенно отказаться от предупреждений в модуле SQLite3.

📣 RFC: Readonly amendments

Nicolas Grekas и Máté Kocsis предлагают улучшить свойства и классы readonly.

🛠 PhpStorm

🔹 AMA с командой PhpStorm

🔹 Вышел PhpStorm 2022.3 RC – Полная поддержка PHP 8.2, новый пользовательский интерфейс (предварительный просмотр), поддержка Redis и многое другое.

🔹 VKCOM/modulite – Честная модульность внутри PHP.

🔴 LARAVEL

🎬 AMA About Laravel with Taylor Otwell

🔹 Как мы провели второй русскоязычный Laravel-митап от Михаила Радионова.

🔹 protonemedia/laravel-splade – Пакет для создания интерактивности непосредственно в Blade, без необходимости писать JS-код.

🟢 Yii

🔹 Новости Yii 2022, выпуск 2 от Александра Макарова.

🔹 Yii3 Overview 2. Вспомогательные инструменты разработки от Дмитрия Дерепко.

📄 СТАТЬИ

🔹 Как мы наш большой проект на KPHP мигрировали от Алексея Васильева.

🔹 KPHP спустя 2 года от Александра Кирсанова.

🔹 Старый код в новой обёртке — как наша команда избавлялась от legacy от Станислава Решетнева.

🎬 ВИДЕО

🔹 На Ютуб канале PHP Point вышли новые выпуски PHP-линча, где Валентин Удальцов разбирает несколько пакетов и комментирует код.



🎬 Дайджест PHP в видео-формате на канале CutCode
Please open Telegram to view this post
VIEW IN TELEGRAM
December 5, 2022
December 8, 2022
Дайджест PHP – Январь 2023

Подборка свежих новостей, инструментов, видео и материалов из мира PHP. Приятного чтения!

⚡️ НОВОСТИ

🔹 Вышли PHP 8.0.27, PHP 8.1.14, PHP 8.2.1

В этих версиях исправлена ошибка безопасности.

Завершилась активная поддержка PHP 8.0, теперь версия будет получать только секьюрити-обновления.

🛠 What’s Next in PhpStorm: The 2023.1 Public Roadmap

В первом выпуске 2023 года команда JetBrains стремится повысить производительность и ускорить индексирование, добавить интеграцию с 3v4l.org, улучшить поддержку дженериков, а также тегов PHPStan и Psalm.

🔹 Вышел Symfony 6.2

Улучшенная поддержка Emoji, аутентификатор Access Token, встроенные атрибуты Cache+Security+Template+Doctrine, улучшенная поддержка перечислений и многое другое.
Ознакомьтесь со списком новых возможностей, чтобы узнать об основных особенностях этого нового выпуска.

🔹Вышли Psalm 5, Xdebug 3.2.0, PHPStan 1.9.0, Drupal 10, amphp/amp 3.0.0, PHP-DI 7.0

🐘 ЯДРО PHP

RFC: Dynamic class constant fetch

RFC: More Appropriate Date/Time Exceptions

📊 RFC: Asymmetric Visibility

📣 RFC: List\unique() and Assoc\unique()
Ilija Tovilo предложил добавить две новые функции. Основная проблема в том, что функция array_unique использует нестрогое сравнение, новые фунции будут использовать строгое сравнение, первая — отбрасывая ключи, а вторая — сохраняя их.

📣 RFC: Unicode Text Processing
Derick Rethans предложил новый класс, чтобы использовать и обрабатывать текст (Unicode) более удобным для разработчиков способом по сравнению с модулем intl.
Все методы нового класса Text будут возвращать новый (неизменяемый) объект.

📣 RFC: Add SameSite cookie attribute parameter
George Peter Banyard предлагает добавить параметр SameSite во все соответствующие функции.

🔹 18 функций/изменений для улучшения ядра PHP
Thomas Hruska реализовал cubiclesoft/php-ext-qolfuncs – набор функций для улучшения жизни PHP-разработчика.
Сради них есть несколько довольно интересных дополнений: str_splice(), str_realloc(), fread_mem(), is_reference() и refcount().
С нетерпением ждём появления официального RFC.

📄 СТАТЬИ

🔹 Вышел PHP 8.2: разбираем главные изменения – Александр Макаров, Валентин Удальцов и Владлен Гилязетдинов разбираются, какие новые фичи появились в PHP 8.2, насколько эти изменения глобальны и какую роль в них сыграл проект РHP Foundation.

🔹 Откуда что берется: интеграция с ЕСИА на языке PHP

🔹 Как мы интегрировали и настроили для работы Conventional Commits в PHPStorm

🔹 Честные модули внутри PHP: теперь они существуют и запись доклада с HighLoad++

🔹 Популяризация JSON-RPC (часть 1)

🔹 Работа с Веб-сокетами на PHP

🔹 В очередь, ...! Как управлять состоянием системы через события

🔹 Зачем и как использовать Объекты передачи данных в Laravel

🎬 ВИДЕО

🔹 ID-баттл: UUID vs автоинкремент

🔹 Docker for PHP developer: tips and tricks

🔹 PHP: почему его вечно хоронят, актуально ли его учить и чем он полезен бизнесу



🎬 Дайджест PHP в видео-формате на канале CutCode

Ещё больше новостей и ссылок в январском выпуске PHP Annotated от JetBrains 💜
Please open Telegram to view this post
VIEW IN TELEGRAM
January 20, 2023
Дайджест PHP – Февраль 2023

Подборка свежих новостей, инструментов, видео и материалов из мира PHP. Приятного чтения!

⚡️ НОВОСТИ

🔹 Вышли PHP 8.0.28, PHP 8.1.16 и PHP 8.2.3

❗️Исправлены уязвимости CVE-2023-0568, CVE-2023-0567 и CVE-2023-0662.

🔹 Вышел Laravel 10

🔹 Вышел PHPUnit 10

Грядет большой релиз стиля кодирования PER

Версия 1.0.0 была копией PSR-12. Следующая версия посвящена расширению спецификации до последних функций PHP и исправлению несоответствий.

🐘 ЯДРО PHP

RFC: Asymmetric Visibility

Ilija Tovilo и Larry Garfield получили необходимые отзывы и, возможно, представят пересмотренную версию RFC, а пока они сосредоточатся на RFC по добавлению хуков и аксессоров к свойствам.

RFC: Readonly amendments

📣 RFC: Path to Saner Increment/Decrement operators – George Peter Banyard предлагает улучшить операторы инкремента и декремента.

📣 RFC: Pass Scope to Magic Accessors – Nicolas Grekas и Ilija Tovilo предлагают передавать область вызова в магические аксессоры, чтобы сделать её получение более тривиальным.

📣 RFC: Typed class constants – Benas Seliuginas и Máté Kocsis предлагают добавить поддержку объявления типов констант для классов и интерфейсов.

📣 RFC: Working With Substrings – Thomas Hruska предлагает оптимизировать работу с подстроками.

🛠 PhpStorm 2023.1 Early Access Program Is Open!

- Запуск PHP-скриптов на 3v4l.org
- Улучшение производительности, включая общие индексы для популярных пакетов PHP
- Улучшения в новом пользовательском интерфейсе
- Поиск и замен на основе регулярных выражений

SYMFONY

🔹 Оптимизация OneToMany коллекций Doctrine

🔹 Докеризируем Symfony

🔹 Clean Architecture, DDD, гексагональная архитектура. Разбираем на практике blog на Symfony

🔴 LARAVEL

🎬 Обзор Laravel 10. Что нового в обновлении и попытка апгрейда проекта с Laravel 9 до 10 версии

🎬 Разбор метода Macro

🎬 Разбор Query Builder, Collections, Model в Laravel

🟢 YII

🔹 Yii Validator — простой и мощный

🔹 Yii news 2023, issue 1

🛠 ИНСТРУМЕНТЫ

🔹 paratestphp/paratest – Пакет параллельного тестирования для PHPUnit. Вышла версия 7.0.0.

🔹 spatie/php-structure-discoverer – Пакет для автоматического обнаружения классов в PHP-приложении.

🔹 TheDragonCode/benchmark – Простой инструмент для сравнения времени, необходимого для выполнения двух различных блоков кода.

🔹 Sammyjo20/Saloon – Идея пакета заключается в том, чтобы упростить создание SDK для сервисов или организовать доступ к различным API в едином стиле.

📄 СТАТЬИ

🔹 Импорт полной базы ФИАС за 9 часов, How To

🔹 Простой бенчмарк для PHP приложений

🔹 Двухуровневый CI-процесс PHP-проекта

🔹 Как правильно проверять сложность пароля пользователя при регистрации

🔹 Не пытайтесь обезопасить ввод. Экранируйте вывод

🔹 PHPStorm + XDebug + Docker

🔹 Итоги третьего ежегодного опроса PHP-сообщества

🔹 Готовим версионирование API в PHP-фреймворках

💙АУДИО/ВИДЕО

🎬 PHP-линч #9

🎵 Самописные инфраструктурные компоненты

📅 СОБЫТИЯ

💙 Podlodka PHP Crew × Точка – 27 февраля - 3 марта.



Ещё больше новостей и ссылок в февральском выпуске PHP Annotated от JetBrains 💜
Please open Telegram to view this post
VIEW IN TELEGRAM
March 1, 2023
Дайджест PHP – Апрель 2023

Подборка свежих новостей, инструментов, видео и материалов из мира PHP. Приятного чтения!

⚡️ НОВОСТИ

🔹 Вышли PHP 8.1.18 и PHP 8.2.5

🔹 Вышел Pest 2.0

🔹 Вышел Bref 2.0

🔹 Вышел стиль кодирования PER 2.0

🔹 Выбраны релиз-менеджеры PHP 8.3

💜 PHP Foundation Update, March 2023

🛠 Вышел PhpStorm 2023.1

🐘 ЯДРО PHP

RFC: Arbitrary static variable initializers

📣 RFC: Clone with

📣 RFC: New core autoloading mechanism with support for function autoloading

📣 Jakub Zelenka предложил сформировать Технический комитет PHP

🔴 LARAVEL

🔹 Вышел Valet 4.0

🔹 Вышел Laravel IDEA 7.0

🎬 Обзор Spatie route attributes

🎬 Обзор пакета Fortify для Laravel

🛠️ ИНСТРУМЕНТЫ

🔹 crazywhalecc/static-php-cli - Инструмент для сборки PHP-приложений в один бинарный файл без лишних зависимостей.

🔹 aschmelyun/subvert - Создание субтитров, аннотаций и глав из видео за считанные секунды.

🚧 NativePHP - Marcel Pociot создаёт инструмент для запуска десктопных приложений Laravel/PHP поверх Electron или Tauri.

📄 СТАТЬИ

📄 Как и зачем тестировать код на бэкенде: рекомендации для новичков

📄 Апгрейд и рефакторинг PHP-проектов — теперь это просто с Rector

📄 Как разминировать свой код на PHP (и не только)?

📄 «Давайте перепишем всё с нуля». Почему такой подход интереснее программистам, а не бизнесу

📄 Компилируем быстрые консольные .exe приложения на PHP 8.1 в 2023 году, а почему бы и нет?

📄 Проектируем реактивное — Message-Driven системы на PHP

📄 ЦУЦ — или как свести 15 тысяч товаров от разных поставщиков на коленке

📄 Я пробовал GitHub Copilot, и я в восторге

🎬 ВИДЕО

🔹 PHP-линч #10

🔹 PHP-линч #11

🔹 PHP-линч #12



Ещё больше новостей и ссылок в апрельском выпуске PHP Annotated от JetBrains 💜
Please open Telegram to view this post
VIEW IN TELEGRAM
April 24, 2023
Дайджест PHP – Июнь 2023

Подборка свежих новостей, инструментов, видео и материалов из мира PHP. Приятного чтения!

⚡️ НОВОСТИ

❗️ Вышли PHP 8.0.29, PHP 8.1.20 и PHP 8.2.7

🔹 PHP 8.3.0 Alpha 1 доступен для тестирования

❗️ Исследователь изменил файл composer.json 14 PHP-библиотек в репозитории Packagist в попытке найти работу

🔹 Вышел Statamic 4

🛠 Открыта программа раннего доступа PhpStorm 2023.2


🐘 ЯДРО PHP

📣 RFC: Deprecate functions with overloaded signatures

RFC: PHP Technical Committee

RFC: Use exceptions by default in SQLite3 extension

📣 RFC: Marking overridden methods (#[\Override])

📣 RFC: NameOf


🔴 LARAVEL

🎬 Гайд по отношениям в Laravel

🎬 Обзор администраторской панели MoonShine

🎬 PEST тесты в Laravel. Обзор фреймворка для написания тестов


SYMFONY

🔹 Вышел Symfony 6.3.0

📄 Попрощайтесь с проверками на null и исключениями: использование монады Maybe в Symfony


🟢 YII

📄 Новости Yii 2023, выпуск 2

🎬 Конфигурация приложения в Yii3


📄 СТАТЬИ

🔹 gRPC сервер на PHP с помощью Roadrunner, Spiral Framework, Docker

📄 Долгоиграющие приложения на PHP

📄 Как создать приватные репозитории composer

📄 Лови мутанта! Мутационные тесты: зачем и как

📄 Анализ и приоритизация задач в тикетной системе: как красиво реализовать на PHP

📄 Хождение по граблям PDO: что скрывают за собой современные PHP ORM

📄 Пишем Telegram бота для распознавания голосовых сообщений и их обработки с помощью AI

📄 Использование ICU Message Format в PHP

🔹 Репозитории и их истинное назначение


🎬 ВИДЕО

🔹PHP-линч #16

🔹PHP-линч #17

🔹PHP-линч #18



Ещё больше новостей и ссылок в июньском выпуске PHP Annotated от JetBrains 💜
Please open Telegram to view this post
VIEW IN TELEGRAM
June 15, 2023
Дайджест PHP – Июль 2023

Подборка свежих новостей, инструментов, видео и материалов из мира PHP. Приятного чтения!

⚡️ НОВОСТИ

🔹 Вышли PHP 8.1.21 и PHP 8.2.8

🔹 PHP 8.3.0 Beta 1 доступен для тестирования

🔹 Вышел Livewire 3

🔹 Вышел NativePHP

🛠 Вышел PhpStorm 2023.2 Beta

🔹 Вышел Pest «Spicy Summer»


🐘 ЯДРО PHP

RFC: Marking overridden methods (#[\Override])

RFC: Deprecations for PHP 8.3

RFC: Deprecate functions with overloaded signatures

RFC: Deprecate remains of string evaluated code assertions

RFC: Path to Saner Increment/Decrement operators

RFC: PDO driver specific sub-classes

RFC: Interface Default Methods

📣 RFC: Closure self reference


🔴 LARAVEL

🔹 Представлены 4 новых пакета: Folio, Volt, Herd и Prompts

🔹 Новые возможности и изменения Livewire v3

📄 Постановка задач в очередь Laravel сторонними сервисами

🎬 Middlewares безопасности в проектах на Laravel

🎬 Отношения hasOneThrough и hasManyThrough


SYMFONY

🔹 Romaixn/gosumer – Использование сообщений Symfony Messenger с помощью Go.


🟢 YII

🔹 yiisoft/proxy-middleware 1.0.0

🔹 yiisoft/rate-limiter 3.0.0

🔹 Embracing the Future: Yii Framework Updates and Yii 2.2 Discussions


📄 СТАТЬИ

📄 PHP. Как увеличить потребление памяти в 3 и более раз при работе с массивами

📄 Разбираемся с асинхронным PHP

📄 Генерация и валидация чисел по алгоритму Луна

📄 Неудачное внедрение Redis Cluster в монолит на PHP 7.2.X

📄 Как два байта переслать: контрибьютим в KPHP

📄 Управление памятью в PHP. Сборка мусора, слабые ссылки и прочая челядь


🗓 СОБЫТИЯ

🔹Podlodka PHP Crew, 16 – 20 октября



Ещё больше новостей и ссылок в июльском выпуске PHP Annotated от JetBrains 💜

PHP-дайджест в видео формате на канале CutCode 🎬
Please open Telegram to view this post
VIEW IN TELEGRAM
August 1, 2023