Если нужно взять значение и подставить запасное, необязательно сначала проверять isset():
$name = isset($request['name'])
? $request['name']
: 'Guest’;
$name = $request['name'] ?? 'Guest’;
Он вернёт 'Guest', если значение отсутствует или равно null.
$value = 0 ?? 100; // 0
📌 Простое правило:
?? → «возьми значение, а если его нет — используй это».
isset() → «проверь, существует ли значение и не null ли оно».
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
php roadmap 2026.pdf
328.6 KB
Сохраняйте roadmap, чтобы не потеряться в огромном экосистемном дереве PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
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
При каждом запросе PHP проверяет mtime файла на диске. На высоких RPS — это сотни лишних stat()-syscall'ов в секунду. Инвалидируйте кеш вручную через opcache_reset() или перезапуск PHP-FPM при деплое.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
В PHP 8.4 ленивые объекты появились прямо в движке. Это особенно полезно для ORM, DI-контейнеров и объектов, создание которых может быть дорогим.
Создать lazy ghost можно через Reflection:
$reflector = new ReflectionClass(Order::class);
$order = $reflector->newLazyGhost(
function (Order $order): void {
$order->__construct(loadFromDb());
}
);
На этом этапе конструктор ещё не выполнялся. Когда объекту понадобится состояние, PHP вызовет initializer и объект инициализируется.
Есть и второй вариант — newLazyProxy(): он при инициализации создаёт реальный объект и проксирует дальнейшие обращения к нему.
И важный момент: lazy objects не означают автоматическое ускорение всего приложения. Если объект в итоге всегда используется, выигрыш от откладывания инициализации может быть минимальным.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
13 августа вышла Beta 1, а 27 августа запланирована Beta 2. Дальше по календарю: Beta 3 — 10 сентября, RC1 — 24 сентября и GA — 19 ноября.
Новые RFC для 8.6 уже не проходят — сейчас фокус смещается на совместимость, регрессии и баги.
Обычному приложению необязательно переходить на бету в проде. А вот отдельный CI-job с beta-версией может заранее показать, где релиз что-то сломал.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
В PhpStorm появился отдельный Laravel Tool Window, который собирает несколько вещей, ради которых раньше приходилось открывать терминал, логи и браузер.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10😁4🥱1
Вместо:
if (!is_string($name) || $name === '') {
throw new InvalidArgumentException(
'Name must be a non-empty string'
);
}
можно написать:
use Webmozart\Assert\Assert;
Assert::stringNotEmpty($name);
Assert::email($email);
Assert::range($age, 18, 99);
Assert::allInstanceOf(User::class, $users);
Установка:
composer require webmozart/assert
📌 В итоге вместо десятков однотипных if/throw получаем компактные и единообразные guard-условия.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Please open Telegram to view this post
VIEW IN TELEGRAM
😢29😁7
Без библиотек — всё уже есть в языке:
// Быстро собрать список/словарь
$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
👍12
Вместо того чтобы каждый раз объяснять AI-агенту правила проекта, фреймворка и инструменты, skills можно установить и хранить как переиспользуемые инструкции.
В PhpStorm 2026.2 появился отдельный Skills Manager:
📌 Особенно интересно для команд, где несколько разработчиков используют агентов и хотят, чтобы они работали по одинаковым правилам.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱1