Анонімні класи
Давня фіча, яку безліч розробників досі ігнорують
- Додано у версії: PHP 7.0
- Що дає: можливість створювати клас “на льоту” — без імені, без окремого файлу, просто у місці, де він реально потрібен.
Чому про це варто згадати
Попри те, що анонімні класи з’явилися ще у PHP 7, спілкування з розробниками показує приблизно таку статистику:
- 9 з 10 не бачать для них “практичного сенсу”;
- 7 з 10 — ніколи не пробували створити
new class {}навіть у петпроєктах або чернетках.
А дарма — це інструмент, який ідеально підходить для тимчасових об’єктів, адаптерів, обгорток і стратегій.
Коли анонімні класи реально зручні
- коли потрібен mock обʼєкт для тестів;
- коли треба підмінити поведінку об’єкта лише тут і зараз;
- коли не хочеться створювати окремий клас заради дрібної логіки;
- коли потрібно “локально” адаптувати чи розширити поведінку;
- коли потрібен короткий об’єкт із власним станом або кількома методами.
Реальні приклади застосування
Не буду наводити приклад створення mockів для тестів, цих прикладів повно в інтернеті, натомість поділюся більш практичним застосуванням анонімних класів.
Тимчасовий адаптер
$adapter = new class($apiClient) implements PaymentGateway
{
public function __construct(private ApiClient $api) {}
public function pay(float $amount): bool {
return $this->api->request('/pay', ['sum' => $amount]);
}
};
$adapter->pay(9.99);
Пара рядків — і є готовий адаптер без створення файлу.
Локальна стратегія або callback-об’єкт
$transformer = new class
{
public array $alreadyTransform = [];
public function transform(int $v): int
{
return $this->alreadyTransform[$v] ??= $v*10;
}
};
$result = array_map(
$transformer->transform(...),
[1, 2, 3, 2, 1, 2, 3]
);
var_dump($result); //[10, 20, 30, 20, 10, 20, 30]
Callable з методом і власним станом. Результат отримаємо для сімох елементів, а процес запуститься лише тричі.
Тимчасовий listener для події
$dispatcher->addListener('user.registered', new class {
public function __invoke(User $user): void {
// логування, повідомлення, email — все що завгодно
}
});
Одноразовий слухач — і не треба роздувати кількість файлів в проєкті.
DTO “на льоту”
return new class($user, $stats) {
public function __construct(
public User $user,
public array $stats
) {}
public function total(): int {
return array_sum($this->stats);
}
};
Коли є зайвим створювати окрему структуру для разового результату.
Висновок
Анонімні класи — це старий, але дуже недооцінений інструмент. Вони економлять час, зменшують кількість файлів і дозволяють тримати тимчасову логіку саме там, де вона потрібна.
Якщо ти теж ще не пробував new class {}, зроби це сьогодні. Можливо, відкриєш для себе новий улюблений трюк PHP.
← Попередня: Property Promotion · Уся серія · Наступна: Стрілкові функції →
Вперше опубліковано в Telegram-каналі «Створений щоб помирати» 16.10.2025.