Откройте для себя весь класс, реализующий интерфейс - PullRequest
1 голос
/ 06 марта 2012

Привет! Я использую symfony2 framework для создания сайта. Я определил интерфейс в PHP как:

interface AdminPluginInterface {
    public function getName();
}

Теперь я хотел бы знать все классы, загружаемые Symfony2 UniversalClassLoader, который реализует мой интерфейс, чтобы использовать их как:

foreach ($classes as $class)
{
    $class->getName();
}

Спасибо за ваши ответы!

Ответы [ 3 ]

2 голосов
/ 30 ноября 2015

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

2 голосов
/ 06 марта 2012

Попробуйте использовать is_a() функцию:

foreach ($classes as $class)
{
    $classname = $class->getName();
    var_dump(is_a($classname,'AdminPluginInterface'));
}

Для получения дополнительной информации, проверьте:

0 голосов
/ 01 апреля 2015

Это немного старо, но я думаю,

class_implements()

- это то, что вам нужно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...