Please open Telegram to view this post
VIEW IN TELEGRAM
😢33😁10
Без библиотек — всё уже есть в языке:
// Быстро собрать список/словарь
$emails = array_column($users, 'email');
$map = array_column($users, 'email', 'id');
// Присвоить только если значения ещё нет
$config['timeout'] ??= 30;
// Объединить массивы с переопределением
$query = [...$defaults, 'limit' => 50];
// Проверить, является ли массив списком
array_is_list([1, 2, 3]); // true
// Передать метод напрямую как callable
$ids = array_map(User::getId(...), $users);
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Вместо того чтобы каждый раз объяснять AI-агенту правила проекта, фреймворка и инструменты, skills можно установить и хранить как переиспользуемые инструкции.
В PhpStorm 2026.2 появился отдельный Skills Manager:
📌 Особенно интересно для команд, где несколько разработчиков используют агентов и хотят, чтобы они работали по одинаковым правилам.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🥱1
Автоинкремент удобен, но плохо подходит для распределённых систем. UUIDv4 решает проблему уникальности, зато случайные значения могут хуже работать с B-tree индексами.
use Symfony\Component\Uid\Uuid;
$id = Uuid::v7();
echo $id->toRfc4122();
// 0192f8a1-...
echo $id->getDateTime();
// время, закодированное в UUID
$id->toBase58();
composer require symfony/uid
Особенно интересно для распределённых сервисов, где ID нужно генерировать независимо от БД.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10
Библиотека написана на Laravel и включает все необходимое:
— аутентификация,
— профили пользователей,
— биллинг,
— подписка,
— роли и права доступа,
— уведомления и административная панель.
Инструмент упрощает создание SaaS-приложений, предоставляя необходимые базовые компоненты и гибкие возможности для дальнейшей настройки
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2😁1
PHP компилирует каждый .php-файл в байткод при каждом запросе — если не настроен OPcache. Это означает лишние CPU-циклы на парсинг даже самого тривиального хелпера.
; включаем
opcache.enable=1
opcache.enable_cli=1
; кол-во кешируемых файлов (>= числа файлов в проекте)
opcache.max_accelerated_files=20000
; размер разделяемой памяти (MB)
opcache.memory_consumption=256
; кешируем строки — экономим RAM
opcache.interned_strings_buffer=16
; в продакшне: 0 (не проверять изменения файлов)
opcache.validate_timestamps=0
Почему validate\_timestamps=0 в проде
При каждом запросе PHP проверяет mtime файла на диске. На высоких RPS — это сотни лишних stat()-syscall'ов в секунду. Инвалидируйте кеш вручную через opcache_reset() или перезапуск PHP-FPM при деплое.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31🥱3❤2💯2
В PHP 8.5 появилась малоизвестная CLI-опция:
php --ini=diff
Она показывает только настройки, которые отличаются от стандартной конфигурации PHP.
Полезно, когда нужно:
— разобраться, чем production отличается от дефолта;
— проверить Docker-образ;
— перенести конфигурацию на новый сервер.
Особенно удобно вместо ручного сравнения огромного php.ini.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3
В PHP 8.3 появился атрибут #[Override], который помогает ловить ошибки при переопределении методов.
Если метода find() нет в родительском классе или интерфейсе, PHP сообщит об ошибке.
Полезно при рефакторинге: переименовал метод в базовом классе — наследники не останутся с «тихо сломанным» override.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Вместо массивов вроде:
$email = $data['email'];
$quantity = $data['quantity’];
class OrderData extends Data
{
public function __construct(
public string $email,
public int $quantity,
public ?string $promoCode = null,
) {}
}
$order = OrderData::from($request->all());
echo $order->email;
Дальше работают обычные типы PHP и автодополнение IDE, а laravel-data добавляет маппинг, валидацию, вложенные DTO и преобразование обратно в массив или JSON.
Удобный вариант, когда DTO в Laravel становится больше, чем просто набором полей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11😁3
Такой вызов приходится расшифровывать:
createUser('Аня', true, false, true);
С PHP 8.0 можно передать аргументы по имени:
createUser(
name: 'Аня',
isAdmin: true,
sendEmail: false,
verified: true,
);
Сигнатуру метода менять не нужно — именованные аргументы работают прямо с существующими параметрами.
createUser(
name: 'Аня',
verified: true,
);
Никаких зависимостей — просто вызов, который сам объясняет, что именно происходит.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱13👍9
В новой версии Telescope искать и разбирать записи можно без открытия dashboard.
php artisan telescope:list request
php artisan telescope:show latest:request
php artisan telescope:list exception --limit=5
php artisan telescope:list request --tag=Auth:42
php artisan telescope:list --batch=79a09461
php artisan telescope:show latest:exception
Для скриптов и coding agents есть --json:
php artisan telescope:show latest:exception --json
А --full отключает сокращение длинных SQL, сообщений и payload’ов.
В 5.24 также исправили stale-запросы dashboard: при навигации старый polling-запрос больше не должен перезаписывать уже открытый экран.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1