Support 6.15.0 released
Added
- Added missing isNotEmpty methods
https://github.com/TheDragonCode/support/releases/tag/6.15.0
#support
Added
- Added missing isNotEmpty methods
https://github.com/TheDragonCode/support/releases/tag/6.15.0
#support
GitHub
Release 6.15.0 · TheDragonCode/support
Added
Added missing isNotEmpty methods by @andrey-helldar in #290
Added missing isNotEmpty methods by @andrey-helldar in #290
Laravel Deploy Operations 6.3.0 released
Changed
- Displaying name of created action
https://github.com/TheDragonCode/laravel-deploy-operations/releases/tag/6.3.0
#laravel_deploy_operations #deploy #laravel #operations
Changed
- Displaying name of created action
https://github.com/TheDragonCode/laravel-deploy-operations/releases/tag/6.3.0
#laravel_deploy_operations #deploy #laravel #operations
GitHub
Release 6.3.0 · TheDragonCode/laravel-deploy-operations
Changed
Displaying name of created action by @fkrzski in #177
Displaying name of created action by @fkrzski in #177
Laravel Deploy Operations 6.3.1 released
Fixed
- Fixed an issue with displaying colors
- Fixed the range of laravel/prompts version used
https://github.com/TheDragonCode/laravel-deploy-operations/releases/tag/6.3.1
#laravel_deploy_operations #deploy #laravel #operations
Fixed
- Fixed an issue with displaying colors
- Fixed the range of laravel/prompts version used
https://github.com/TheDragonCode/laravel-deploy-operations/releases/tag/6.3.1
#laravel_deploy_operations #deploy #laravel #operations
GitHub
Release 6.3.1 · TheDragonCode/laravel-deploy-operations
Fixed
Fixed an issue with displaying colors by @andrey-helldar in #178
Fixed the range of laravel/prompts version used by @andrey-helldar in #179
Fixed an issue with displaying colors by @andrey-helldar in #178
Fixed the range of laravel/prompts version used by @andrey-helldar in #179
👍1
Во время разработки иногда возникает необходимость быстрой подсказки имён файлов из какой-либо директории.
Обычно мы пишем полный путь начинающийся либо от текущего местоположения (
Минусы этого способа в том, что:
1. нужно всегда помнить где находится файл либо искать его, надеясь на подсказки шторма;
2. таких мест вызова может быть много и в случае изменения расположения файлов, нужно их все обновлять.
При помощи плагина Laravel Idea для PhpStorm можно значительно упростить это действие.
Допустим у нас есть функция
Для этого создаём в корне проекта файл
И добавляем префикс директории в функции. Например:
Всё! Обращение к пути выглядит компактно, красиво и функционально:
В качестве бонуса работает Ctrl/Cmd+Click по пути - плагин перебросит Вас в файл 🙂
Обычно мы пишем полный путь начинающийся либо от текущего местоположения (
__DIR__), либо от функции-хелпера Laravel (base_path(), resource_path() и т.д.).Минусы этого способа в том, что:
1. нужно всегда помнить где находится файл либо искать его, надеясь на подсказки шторма;
2. таких мест вызова может быть много и в случае изменения расположения файлов, нужно их все обновлять.
При помощи плагина Laravel Idea для PhpStorm можно значительно упростить это действие.
Допустим у нас есть функция
webhook(), в которую мы хотим передавать не полный, а относительный директории путь.Для этого создаём в корне проекта файл
ide.json и вставляем в него следующее содержимое, не забыв изменить имя функции (или нескольких), а также путь к директории:{
"$schema": "https://laravel-ide.com/schema/laravel-ide-v2.json",
"completions": [
{
"complete": "directoryFiles",
"condition": [
{
"functionNames": ["webhook"],
"place": "parameter",
"parameters": [1]
}
],
"options": {
"directory": "tests/Fixtures",
"recursive": true
}
}
]
}И добавляем префикс директории в функции. Например:
function webhook(string $filename): void
{
$content = json_decode(file_get_contents(
base_path('tests/Fixtures/' . $filename)
), true);
// some actions
}
Всё! Обращение к пути выглядит компактно, красиво и функционально:
it('with reply', function () {
webhook('Callbacks/welcome.json');
});В качестве бонуса работает Ctrl/Cmd+Click по пути - плагин перебросит Вас в файл 🙂
🔥5
⚡️ Laravel Octane для тех, кто хочет быстро вкатиться, но не знает с чего начать
Возникла необходимость запустить вышеупомянутый сервис с RoadRunner на одном из проектов, и чтобы не ходить вокруг да около, прилагаю процесс в "сухом" виде:
1. Устанавливаем зависимости:
2. Выполняем консольную команду
2.1. Which app?
2.2. Download binary?
Всё. Октан готов к работе. Можете запускать консольную команду
Но есть один нюанс, во всяком случае под Windows. Запуская октан в wsl, он не будет сохранять состояние приложения и при каждом обновлении страницы будет его заново инициализировать. Решение очень простое - нужно указать количество воркеров для работы, например, один:
Всё. Теперь октан будет гарантированно запоминать состояние. Но есть, опять же, нюанс - если к этой команде добавить параметр
Для сравнения, загрузка страницы со списком товаров из базы при старте через
Также можно дополнить блок
После этого, при вызовах команд
И вторая команда -
Всё 🙂
Возникла необходимость запустить вышеупомянутый сервис с RoadRunner на одном из проектов, и чтобы не ходить вокруг да около, прилагаю процесс в "сухом" виде:
При разработке под Windows нужно обязательно войти в подсистему Linux (wsl или в контейнер виртуализации), так как под самим Windows запустить RoadRunner можно, но вот Laravel Octane - нет. Причина в использовании функций сигналов, отсутствующих в Windows. Дальше для всех одинаково.
1. Устанавливаем зависимости:
composer require laravel/octane spiral/roadrunner spiral/roadrunner-cli spiral/roadrunner-http
2. Выполняем консольную команду
php artisan octane:install выбирая следующие пункты:2.1. Which app?
roadrunner2.2. Download binary?
YesВсё. Октан готов к работе. Можете запускать консольную команду
php artisan octane:start --poll и наслаждаться им.Но есть один нюанс, во всяком случае под Windows. Запуская октан в wsl, он не будет сохранять состояние приложения и при каждом обновлении страницы будет его заново инициализировать. Решение очень простое - нужно указать количество воркеров для работы, например, один:
php artisan octane:start --poll --workers=1
Всё. Теперь октан будет гарантированно запоминать состояние. Но есть, опять же, нюанс - если к этой команде добавить параметр
--watch, то она упадёт.Для сравнения, загрузка страницы со списком товаров из базы при старте через
artisan serve и с БД в докер-контейнере, занимает у меня около 150-300 мс. Сервис, запущенный из wsl отдаёт данные за 5-7 секунд. Laravel Octane справляется за 41 мс.Также можно дополнить блок
scripts в файле composer.json:{
"scripts": {
// ...
"post-install-cmd": [
"@roadrunner"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force",
"@php artisan vendor:publish --tag=telescope-assets --ansi --force",
"@roadrunner"
],
"octane": [
"Composer\\Config::disableProcessTimeout",
"@php artisan octane:start --poll --workers=1"
],
"roadrunner": [
"rm -f rr",
"@php vendor/bin/rr get-binary -o linux"
]
}
}После этого, при вызовах команд
composer install и composer update октан будет автоматически обновляться.Учтите, что обновление происходит путём скачивания zip архива при помощи curl без пробрасывания авторизационного токена, установленного в Composer, поэтому чревато схватить ошибку 403 API rate limit exceeded.
И вторая команда -
composer octane вместо запуска самого октана.Всё 🙂
🔥7❤4👍1👎1
Laravel Deploy Operations 6.3.2 released
Fixed
- Improved support for Laravel Idea when entering a name
https://github.com/TheDragonCode/laravel-deploy-operations/releases/tag/6.3.2
#laravel_deploy_operations #deploy #laravel #operations
Fixed
- Improved support for Laravel Idea when entering a name
https://github.com/TheDragonCode/laravel-deploy-operations/releases/tag/6.3.2
#laravel_deploy_operations #deploy #laravel #operations
GitHub
Release 6.3.2 · TheDragonCode/laravel-deploy-operations
Fixed
Improved support for Laravel Idea when entering a name by @andrey-helldar in #180
Improved support for Laravel Idea when entering a name by @andrey-helldar in #180
🤖 Поддержка нескольких ботов в DefStudio Telegraph
Программный продукт Telegraph от DefStudio работает шустро и работать с ним одно удовольствие. Но не обошлось и без ложки дёгтя в этом меду - несмотря на возможность работы с несколькими ботами, обработчик для них всех будет лишь один. Благо есть лёгкий способ это исправить.
https://habr.com/ru/articles/848240/
Программный продукт Telegraph от DefStudio работает шустро и работать с ним одно удовольствие. Но не обошлось и без ложки дёгтя в этом меду - несмотря на возможность работы с несколькими ботами, обработчик для них всех будет лишь один. Благо есть лёгкий способ это исправить.
https://habr.com/ru/articles/848240/
Хабр
Поддержка нескольких ботов в DefStudio Telegraph
Программный продукт Telegraph от DefStudio работает шустро и работать с ним одно удовольствие. Но не обошлось и без ложки дёгтя в этом меду - несмотря на возможность работы с несколькими ботами,...
👍8🍓2💊1
Forwarded from Kvede Новости
Состоялся релиз первой альфа-версии проекта Kvede Bot
Всё что можно было протестировать юнит-тестами и руками в тестовых группах, протестировано.
В данный момент текущий функционал @KvedeBot содержит всё что было у @LightCleanerBot с некоторыми доработками в сторону улучшений.
Веб-интерфейса пока ещё нет, он появится в следующих релизах после фиксов возможных багов.
Инструкция по миграции:
1. Удаляем из группы @LightCleanerBot
2. Добавляем в группу @KvedeBot с обязательным назначением прав администратора на удаление сообщений и блокировку пользователей.
3. Всё.
Старый бот будет полностью отключен 31-го октября.
Всё что можно было протестировать юнит-тестами и руками в тестовых группах, протестировано.
В данный момент текущий функционал @KvedeBot содержит всё что было у @LightCleanerBot с некоторыми доработками в сторону улучшений.
Веб-интерфейса пока ещё нет, он появится в следующих релизах после фиксов возможных багов.
Инструкция по миграции:
1. Удаляем из группы @LightCleanerBot
2. Добавляем в группу @KvedeBot с обязательным назначением прав администратора на удаление сообщений и блокировку пользователей.
3. Всё.
Старый бот будет полностью отключен 31-го октября.
Forwarded from Kvede Новости
Проект находится в стадии альфа-тестирования
В это время использовать его может каждый абсолютно бесплатно.
Для начала работы добавьте @KvedeBot в Вашу группу и назначьте администратором, выдав права на удаление сообщений и блокировку пользователей.
Тонкие настройки групп можно передать @Helldar (веб-интерфейс находится в разработке) или в чат поддержки @KvedeSupport.
В это время использовать его может каждый абсолютно бесплатно.
Для начала работы добавьте @KvedeBot в Вашу группу и назначьте администратором, выдав права на удаление сообщений и блокировку пользователей.
Тонкие настройки групп можно передать @Helldar (веб-интерфейс находится в разработке) или в чат поддержки @KvedeSupport.
Главный бот: @KvedeBot
Новостной канал: @KvedeNews
Группа поддержки: @KvedeSupport
Фид спам-блокировок: @KasFeed
Панель управления: https://kvede.com (в разработке)
Фид блокировок: https://kas.kvede.com/feed (в разработке)
Группа в ВК: https://vk.com/kvede
👍3
Kvede Новости
Проект находится в стадии альфа-тестирования В это время использовать его может каждый абсолютно бесплатно. Для начала работы добавьте @KvedeBot в Вашу группу и назначьте администратором, выдав права на удаление сообщений и блокировку пользователей. Тонкие…
@KvedeBot - это проект по управлению группами в Telegram, борьбе со спамом при помощи ИИ, системой репутации и аналитики по чатам.
Часть функций пока ещё недоступна, но вскоре будет.
Часть функций пока ещё недоступна, но вскоре будет.
👍3
Forwarded from Kvede Новости
Большой апдрейт 🤩
За последние четыре дня код проекта несколько вырос начиная с полного рефакторинга тестов, что позволило полностью покрыть все стороны работы бота, сделав простым и прозрачным процесс "общения" с Telegram API.
Коротко о нововведениях:
- При классификации текста на предмет спама теперь учитывается не только имя пользователя, если оно было указано, но ещё и названия кнопок, если они были прикреплены к сообщению;
- В личные фиды блокировок были добавлены кнопки для взаимодействия с заблокированными пользователями. Доступно три кнопки: "спам", "не спам" и "избранные". Названия можно переименовывать для каждого канала;
- Добавлен новый модуль "Избранные пользователи". Он позволяет отмечать пользователей в чате, на которых не будет распространяться анти-спам проверка;
- Посты из каналов теперь не будут удаляться при анти-спам проверке;
- Сообщения длиной менее трёх символов не будут проходить классификацию спама;
- Исправлена ошибка инициализации системы, вследствие которой в ответ на вебхук для условного Ивана писалось сообщение "Руслан, Вы не можете это использовать", где имя "Руслан" могло рандомно меняться;
- Добавлен прогрев авторизационного токена Яндекса, что при деплое позволит сразу закэшировать его результат. До этого первый запрос к нему длился около 5-10 секунд, т.к. системе нужно было время для шифрования данных при подготовке запроса;
- Теперь для администраторов и "обычных" пользователей бот будет показывать разные наборы команд, в т.ч. на разных языках (пока что доступны русский и английский, но кнопки могут иметь прежний вид, т.к. функционал тестируется);
- Улучшили работу с колбэк функциями. Telegram не позволяет передавать данные длиной свыше 60 байт, вследствие чего для некоторых методов колбэки не срабатывали, т.к. совокупность идентификаторов чата, сообщений, пользователя и названия методов превышала допустимый объём. Теперь такого не будет;
- Исправлена ошибка при обработке плейсхолдера с частью отсутствующих данных;
- Исправлена ошибка определения идентификатора сообщения при вызове колбэков.
Далее в очереди новый модуль "Доверенные пользователи", переработка системы приветствий и команда проверки настроек чата 👷♂️
@KvedeBot | Чат поддержки: @KvedeSupport
За последние четыре дня код проекта несколько вырос начиная с полного рефакторинга тестов, что позволило полностью покрыть все стороны работы бота, сделав простым и прозрачным процесс "общения" с Telegram API.
Коротко о нововведениях:
- При классификации текста на предмет спама теперь учитывается не только имя пользователя, если оно было указано, но ещё и названия кнопок, если они были прикреплены к сообщению;
- В личные фиды блокировок были добавлены кнопки для взаимодействия с заблокированными пользователями. Доступно три кнопки: "спам", "не спам" и "избранные". Названия можно переименовывать для каждого канала;
- Добавлен новый модуль "Избранные пользователи". Он позволяет отмечать пользователей в чате, на которых не будет распространяться анти-спам проверка;
- Посты из каналов теперь не будут удаляться при анти-спам проверке;
- Сообщения длиной менее трёх символов не будут проходить классификацию спама;
- Исправлена ошибка инициализации системы, вследствие которой в ответ на вебхук для условного Ивана писалось сообщение "Руслан, Вы не можете это использовать", где имя "Руслан" могло рандомно меняться;
- Добавлен прогрев авторизационного токена Яндекса, что при деплое позволит сразу закэшировать его результат. До этого первый запрос к нему длился около 5-10 секунд, т.к. системе нужно было время для шифрования данных при подготовке запроса;
- Теперь для администраторов и "обычных" пользователей бот будет показывать разные наборы команд, в т.ч. на разных языках (пока что доступны русский и английский, но кнопки могут иметь прежний вид, т.к. функционал тестируется);
- Улучшили работу с колбэк функциями. Telegram не позволяет передавать данные длиной свыше 60 байт, вследствие чего для некоторых методов колбэки не срабатывали, т.к. совокупность идентификаторов чата, сообщений, пользователя и названия методов превышала допустимый объём. Теперь такого не будет;
- Исправлена ошибка при обработке плейсхолдера с частью отсутствующих данных;
- Исправлена ошибка определения идентификатора сообщения при вызове колбэков.
Далее в очереди новый модуль "Доверенные пользователи", переработка системы приветствий и команда проверки настроек чата 👷♂️
@KvedeBot | Чат поддержки: @KvedeSupport
Forwarded from Kvede Новости
@KvedeBot - Ваш надёжный помощник в борьбе со спамом
Хотите избавиться от спама в вашей группе или канале в Telegram? Тогда наш @KvedeBot может стать вашим надёжным помощником! Он автоматически удаляет спам и блокирует нежелательных участников, чтобы вы могли сосредоточиться на общении с друзьями и коллегами. Просто добавьте бота в свою группу или канал, назначьте его администратором и наслаждайтесь чистым и безопасным общением в Telegram!
Бот находится в стадии beta разработки и абсолютно бесплатен для использования.
@KvedeBot | Чат поддержки @KvedeSupport
Хотите избавиться от спама в вашей группе или канале в Telegram? Тогда наш @KvedeBot может стать вашим надёжным помощником! Он автоматически удаляет спам и блокирует нежелательных участников, чтобы вы могли сосредоточиться на общении с друзьями и коллегами. Просто добавьте бота в свою группу или канал, назначьте его администратором и наслаждайтесь чистым и безопасным общением в Telegram!
Бот находится в стадии beta разработки и абсолютно бесплатен для использования.
@KvedeBot | Чат поддержки @KvedeSupport
❤🔥1❤1👍1
❤3
Forwarded from Kvede Новости
📣 Встречайте обновление 0.16 beta!
Мы сделали наш продукт ещё лучше, чтобы управление группами и борьба со спамом были максимально эффективными.
Что нового?
- Отслеживание новых участников. Больше не упустите ни одного пользователя! 🥳
- Проверка настроек чата. Удобная команда
- Защита от блокировок. Спамеры больше не помешают в личных группах и избранных чатах. 🚫
- Исправление ошибок. Теперь сообщения отображаются корректно, даже если они отправлены от имени публичного канала.
И конечно же, мы внедрили несколько незаметных на первый взгляд улучшений, которые приносят большую пользу. 😎
Не упустите возможность попробовать новое обновление! Установите его прямо сейчас и убедитесь в эффективности изменений. 🚀
Мы сделали наш продукт ещё лучше, чтобы управление группами и борьба со спамом были максимально эффективными.
Что нового?
- Отслеживание новых участников. Больше не упустите ни одного пользователя! 🥳
- Проверка настроек чата. Удобная команда
/check всегда под рукой. - Защита от блокировок. Спамеры больше не помешают в личных группах и избранных чатах. 🚫
- Исправление ошибок. Теперь сообщения отображаются корректно, даже если они отправлены от имени публичного канала.
И конечно же, мы внедрили несколько незаметных на первый взгляд улучшений, которые приносят большую пользу. 😎
Не упустите возможность попробовать новое обновление! Установите его прямо сейчас и убедитесь в эффективности изменений. 🚀
5
Новая версия Laravel 11.32 принесла небольшой сюрприз тем, кто проверяет факт инициализации классов через хелпер
На первом скриншоте отображено поведение на версии 11.31 и ниже (верхний блок) и 11.32 (нижний блок).
На втором скриншоте отображено решение проблемы, во всяком случае для тестов.
app()->resolved().На первом скриншоте отображено поведение на версии 11.31 и ниже (верхний блок) и 11.32 (нижний блок).
На втором скриншоте отображено решение проблемы, во всяком случае для тестов.
Быстрое обновление данных в снапшот-тестировании
При изменении данных в снапшотах, официальная документация PEST рекомендует вызывать консольную команду
Работает она достаточно просто: удаляет содержимое папки
К сожалению, параметр
Для упрощения взаимодействия можно использовать скрипты композера:
Теперь при вызове команды
Разница в цифрах:
Пользуйтесь 😎
При изменении данных в снапшотах, официальная документация PEST рекомендует вызывать консольную команду
vendor/bin/pest --update-snapshots.Работает она достаточно просто: удаляет содержимое папки
tests/.pest и запускает тесты в "обычном" режиме и принцип работы самих тестов не менее прост: если файлов нет, они будут созданы, иначе результат выполнения будет сверяться с тем, что существует в файлах.К сожалению, параметр
--update-snapshots не работает при запуске параллельного тестирования, но есть один лайфхак - нужно всего лишь удалить вышеупомянутую папку и тогда тесты будут создавать новый дамп.Для упрощения взаимодействия можно использовать скрипты композера:
{
"scripts": {
"test:unit": [
"Composer\\Config::disableProcessTimeout",
"@php artisan test --parallel --recreate-databases --drop-databases"
],
"test:update": [
"rm -rf tests/.pest",
"@test:unit"
]
}
}Теперь при вызове команды
composer test:unit будут запущены параллельные тесты для проверки, а при вызове composer test:update будут обновлены снапшоты.Разница в цифрах:
$ composer test:update
> rm -rf tests/.pest
> @php artisan test --parallel --recreate-databases --drop-databases
...<some>...
Tests: 517 passed (2775 assertions)
Duration: 57.83s
Parallel: 16 processes
$ php artisan --compact --update-shapshots
...<some>...
Tests: 517 passed (2775 assertions)
Duration: 223.81s
Пользуйтесь 😎
🔥1
Не знаю как так получилось, но сегодня RoadRunner приказал долго жить...
В рамках одной из задач был задеплоен код следующего содержания (упрощён):
При деплое также стоял на его триггер и в консоли вывело ошибку:
И всё. Даже убрав этот участок кода, перезапустив RoadRunner с Laravel Octane и даже перезапустив сам веб-сервер, RR отказывается запускаться постоянно дополняя лог текстом:
Больше в лог ничего не пишет, но и эти надписи пишет при каждом запросе к веб-сайту.
При всём этом:
Решение, пока что, не найдено.
В рамках одной из задач был задеплоен код следующего содержания (упрощён):
try
{
// какое-то действие
return $result;
} catch (Throwable $e) {
return report(
fn () => new CustomException($e, $chat, $user, $module),
fn () => null
);
}
При деплое также стоял на его триггер и в консоли вывело ошибку:
PHP Fatal error: Maximum call stack size of 8339456 bytes
(zend.max_allowed_stack_size - zend.reserved_stack_size) reached during compilation.
Try splitting expression in .../vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 1
И всё. Даже убрав этот участок кода, перезапустив RoadRunner с Laravel Octane и даже перезапустив сам веб-сервер, RR отказывается запускаться постоянно дополняя лог текстом:
worker stopped, and will be restarted
worker stopped, and will be restarted
Больше в лог ничего не пишет, но и эти надписи пишет при каждом запросе к веб-сайту.
При всём этом:
$ art octane:status
INFO Octane server is running.
Решение, пока что, не найдено.
Проблема найдена и устранена...
Вот что значит не брать во внимание мелочи...
...и деплоить не критические изменения в час ночи...🤦🤦🤦
В дополнение, эти изменения были внесены задолго до того злосчастного деплоя. На сервере используется кэширование конфигураций и в какой-то момент почему-то подумал что так будет лучше - зашёл, обновил да и забыл... А при деплое, разумеется, и не вспомнил даже... Причину нашёл когда перебирал все логи, поднимал все выполненные за последние сутки задачи, вспоминая что делал, и только так удалось обнаружить первоисточник.
# .env
# ❌
LOG_CHANNEL=stack
LOG_STACK=stack
# ✅
LOG_CHANNEL=stack
LOG_STACK=single
Вот что значит не брать во внимание мелочи...
...и деплоить не критические изменения в час ночи...🤦🤦🤦
В дополнение, эти изменения были внесены задолго до того злосчастного деплоя. На сервере используется кэширование конфигураций и в какой-то момент почему-то подумал что так будет лучше - зашёл, обновил да и забыл... А при деплое, разумеется, и не вспомнил даже... Причину нашёл когда перебирал все логи, поднимал все выполненные за последние сутки задачи, вспоминая что делал, и только так удалось обнаружить первоисточник.
🤯6👍2
Завтра состоится релиз PHP 8.4
В нём нас ожидают:
- Хуки свойств
- Асимметричная область видимости свойств
- Атрибут
- Новые возможности ext-dom и поддержка HTML5
- Новые функции
- SQL-парсеры, специфичные для драйверов PDO
-
И немного ещё 🎉
https://www.php.net/releases/8.4/ru.php
В нём нас ожидают:
- Хуки свойств
- Асимметричная область видимости свойств
- Атрибут
#[\Deprecated]- Новые возможности ext-dom и поддержка HTML5
- Новые функции
array_*()- SQL-парсеры, специфичные для драйверов PDO
-
new MyClass()->method() без скобокИ немного ещё 🎉
https://www.php.net/releases/8.4/ru.php
www.php.net
PHP 8.4 Released
PHP 8.4 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.
🔥5