Анонимные классы могут быть полезны при написании классов реализации для интерфейсов слушателя, поэтому вам не нужно создавать файл или универсальный класс, чтобы просто реализовать один раз.
Одна из самых элегантных вещейанонимные классы - это то, что они позволяют вам определить одноразовый класс именно там, где он нужен.Кроме того, анонимные классы имеют сжатый синтаксис, который уменьшает беспорядок в вашем коде. Java в двух словах
Таким образом, вы можете иметь анонимную реализацию интерфейса или даже расширить класс с помощью дополнительных свойств или перезаписанных методов.
Пример:
return new class(10) extends SomeClass implements SomeInterface {
private $num;
public function __construct($num)
{
$this->num = $num;
}
};
Другая ситуация:
Предоставьте простую реализацию класса адаптера.Класс адаптера - это класс, который определяет код, вызываемый другим объектом.Взять, к примеру, метод list()
для класса с именем File
.Этот метод выводит список файлов в каталоге.Однако прежде чем он возвращает список, он передает имя каждого файла объекту FilenameFilter
, который вы должны предоставить.Этот FilenameFilter
объект принимает или отклоняет каждый файл.При реализации интерфейса FilenameFilter
вы определяете класс адаптера для использования с методом $file->list()
.Поскольку тело такого класса обычно довольно короткое, легко определить класс адаптера как анонимный класс.
$file = new File("/src");
// Now call the list() method with a single FilenameFilter argument
// Define and instantiate an anonymous implementation of FilenameFilter
// as part of the method invocation expression.
$filelist = $file->list(new class extends FilenameFilterClass {
public function accept(File $f, string $otherInfo) {
return pathinfo($f, PATHINFO_EXTENSION) === ".php";
}
});
Некоторое хорошее базовое понимание и использование анонимных классов можно найти в Java (язнаю, что это не PHP , но это помогает понять) примеры на https://www.geeksforgeeks.org/anonymous-inner-class-java/