Статья

📘 Глава 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 и новее делают язык:

  • Более строгим и безопасным

  • Более лаконичным и читаемым

  • Богатым на новые возможности для разработчиков

PHP
Для ответа вы можете авторизоваться