PHP 7.4 (28.11.2019):

Свойства класса поддерживают объявления типов(кроме void и callable)

🛡️ Typed properties
Объявление типов для свойств класса:

				
					class User {
    public int $id;
    public ?string $name = null;
    private DateTimeImmutable $createdAt;
}
				
			

→ Тип проверяется при записи, не при объявлении.
→ ?T = T|null.
→ Не работает для void, callable, resource.

Стрелочные функции ( автоматически получает доступ к родительскому контексту (авто-use))


🧮 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

🔁 ??= и ?? для свойств
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 умрёт — запись автоматически удалится