🛡️ Typed properties
Объявление типов для свойств класса:
class User {
public int $id;
public ?string $name = null;
private DateTimeImmutable $createdAt;
}
→ Тип проверяется при записи, не при объявлении.
→ ?T = T|null.
→ Не работает для void, callable, resource.
🧮 Arrow functions (fn)
Короткие замыкания с автоматическим захватом $this и переменных по значению:
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3]);
// вместо: array_map(function($n) use ($factor) { return $n * $factor; }, ...)
→ Всегда возвращает выражение (не блок {}).
→ $this доступен без bindTo().
🔁 ??= и ?? для свойств
Null-coalescing assignment:
$this->config ??= loadConfig();
// вместо: $this->config = $this->config ?? loadConfig();
$date['date'] ??= new DateTime();
— Оператор распаковки массивов:
$x = [2,3]; $y = [5,6]; $res = [1, …$x, 4, …$y];
— Ковариация возвращаемого типа:
interface Factory { public function make(): object } class UserFactory implements Factory { public function make(): User { …} }
— Добавлена поддержка предварительной загрузки кода.
php.ini: opcache.preload
— FFI — модуль, который предлагает способ вызова встроенных функций, доступа к встроенным переменным, а также создавать или обращаться к структурам данных в библиотеках на языке Си.
⚠️ Breaking changes
(string) new MyClass() → Error (раньше — «Object»),
real → синоним float (deprecated ещё в 5.0, теперь alias),
FILTER_SANITIZE_STRING → deprecated (удалён в 8.1).
📦 Weak maps (WeakMap)
Кэширование данных по объектам без утечек памяти:
$cache = new WeakMap();
$obj = new stdClass();
$cache[$obj] = ['computed' => true];
// Когда $obj умрёт — запись автоматически удалится