### PHP 8.3+ совместимость
- Null-safe доступ через `??` (оператор null coalescing) вместо `@` подавления ошибок
- Типизированные параметры функций (`array`, `string`, `int`, `bool`)
- Return type declarations для всех функций
- Строгое сравнение типов (`===` вместо `==`)
- `is_array()` проверки вместо truthy/falsy для результатов кеша
### Безопасность
- **SQL Injection защита**: валидация `$ids` в `delete` — `intval()` + `array_filter` вместо сырой вставки строки
- **XSS защита**: `htmlspecialchars()` для username и текста в textarea
- **Проверка доступа**: добавлена `IS_AM` проверка в `edit` (в оригинале отсутствовала!)
- **IP хранение**: экранирование `USER_IP` через `DB()->escape()`
- **Валидация ID**: проверка `$postId <= 0` перед SQL-запросом
- Приведение к `(int)` для всех ID перед вставкой в SQL
- `LIMIT 1` добавлен к запросам, которые должны возвращать одну строку
### Производительность
- Генерация HTML сообщения в функциях `build_chat_message_html()` / `build_chat_message_inner_html()` — убрано ~80 строк дублирования между `select` и `edit`
- SQL-запросы вынесены в `get_chat_messages()` и `refresh_chat_cache()`
- Подготовка BBCode в `prepare_chat_html()` — единая точка парсинга
### Чистота кода
- Убраны грубые сообщения об ошибках, заменены на нейтральные
- Добавлены комментарии на русском языке
- `switch/case` вместо `match` с замыканиями (т.к. `$this` недоступен в замыканиях `match`)
**Отличия от оригинала:**
- `INT UNSIGNED` вместо `int(11)` — display width deprecated в MySQL 8.0+
- `VARCHAR(45)` для IP вместо `CHAR(32)` — поддержка IPv6
- `InnoDB` вместо `MyISAM` — транзакции, crash recovery
- `utf8mb4` вместо `utf8` — полная поддержка Unicode (эмодзи)
- Добавлены индексы на `user_id` и `time`