Статья
📘 Глава 27. Новое в PHP 8–8.5 — атрибуты, union types, match, readonly и другое
Оглавление
🚀 Основные новшества PHP 8 и выше
1. Атрибуты (Attributes)
Раньше для метаданных использовали докблоки (@annotations
), теперь — реальные объекты.
#[Route('/home', methods: ['GET'])]
class HomeController {
// ...
}
Атрибуты — это специальные классы, которые можно прикреплять к классам, методам и т.д.
2. Union Types (Объединённые типы)
Раньше можно было указать только один тип, теперь — несколько:
function test(int|string $value): void {
echo $value;
}
3. Named Arguments (Именованные аргументы)
Можно передавать параметры по имени, а не только по позиции:
function createUser(string $name, int $age, bool $active) {}
createUser(age: 30, name: 'Alex', active: true);
4. Match — новый оператор выбора
Аналог switch, но выражение, возвращающее значение, без «проваливания» между кейсами:
$result = match($value) {
1 => 'one',
2, 3 => 'two or three',
default => 'other',
};
5. Nullsafe operator (?->
)
Чтобы не писать проверки на null:
$name = $user?->getProfile()?->getName();
Если $user
или getProfile()
— null, дальше не идёт.
6. Readonly свойства
Объектное свойство, которое можно присвоить только один раз (обычно в конструкторе):
class User {
public readonly string $name;
public function __construct(string $name) {
$this->name = $name;
}
}
7. Другие улучшения
- Constructor property promotion — сокращённый синтаксис конструктора
class Point {
public function __construct(
public int $x,
public int $y
) {}
}
- Новые функции, типы, улучшения производительности
✅ Итог
PHP 8 и новее делают язык:
-
Более строгим и безопасным
-
Более лаконичным и читаемым
-
Богатым на новые возможности для разработчиков
49