Что такое анонимные классы в PHP?

«Что такое анонимные классы в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Анонимные классы в PHP — это классы, объявляемые и инстанцируемые одновременно, без явного объявления имени. Они полезны для создания одноразовых объектов, особенно в тестах или для реализации простых интерфейсов на лету.

Основные особенности:

  • Отсутствие имени: Доступны только через переменную, в которую был присвоен объект.
  • Конструктор: Могут принимать аргументы.
  • Наследование и реализация интерфейсов: Могут наследоваться от другого класса (extends) и/или реализовывать интерфейсы (implements).
  • Область видимости: Поддерживают все модификаторы доступа (public, protected, private).

Пример создания с аргументом и реализацией интерфейса:

interface LoggerInterface {
    public function log(string $message): void;
}

$logger = new class('app.log') implements LoggerInterface {
    public function __construct(private string $logFile) {}

    public function log(string $message): void {
        file_put_contents($this->logFile, $message . PHP_EOL, FILE_APPEND);
    }
};

$logger->log('Событие запуска');

Пример для тестирования (мок-объект):

// Вместо создания полноценного мок-класса
$mockService = new class extends SomeService {
    public function process(): bool {
        return true; // Заглушка для теста
    }
};

Их стоит использовать умеренно, так как чрезмерное применение может усложнить чтение кода и навигацию по нему.