Что является хорошим примером для использования анонимного класса в PHP7 - PullRequest
0 голосов
/ 01 марта 2019

Когда я искал новые PHP7-функции Я наткнулся на анонимные классы.

Я не понял, когда они должны стать полезными, и искал пример.

Я прочитал эту статью , но я не вижу преимуществ этой функции.

В последнем разделе перед заключением они написали следующее о преимуществах:

Одним из преимуществ является то, что нам больше не нужно именованное расширение.Обычно указанное расширение будет скрыто в некотором включенном файле, если вам когда-нибудь понадобится увидеть, как оно определено, вы должны начать его искать.В анонимных классах определение находится в том же месте, где создается объект.

С другой стороны, я вижу большой недостаток, поскольку вы можете использовать этот анонимный класс только в том месте, где он определен.

Может кто-нибудь объяснить, когда эта функция полезна?

Особенно, если она может помочь при создании пользовательских систем или расширении CMS, таких как WordPress (желательно на немецком языке, хотя английский также приветствуется).

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я должен использовать анонимный класс, только если этот класс нигде больше не используется и если этот класс не изменился с момента первого кодирования.
Так, например, класс базы данных может быть кандидатом на использование анонимного класса, потому чтоон должен использоваться только один раз и может быть включен в любой другой файл php.В большинстве случаев данные для доступа к базе данных находятся в файле конфигурации.Поэтому этот файл должен быть загружен для каждого php-файла, который использует базу данных, когда вы хотите избежать жесткого кодирования параметров базы данных (что является плохой идеей).Если вы закодировали этот класс как анонимный класс в файле конфигурации, вы исключили один из них, не теряя сопровождение.

0 голосов
/ 01 марта 2019

Анонимные классы могут быть полезны при написании классов реализации для интерфейсов слушателя, поэтому вам не нужно создавать файл или универсальный класс, чтобы просто реализовать один раз.

Одна из самых элегантных вещейанонимные классы - это то, что они позволяют вам определить одноразовый класс именно там, где он нужен.Кроме того, анонимные классы имеют сжатый синтаксис, который уменьшает беспорядок в вашем коде. 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/

...