Загрузчик плагинов PHP, который создает экземпляр плагинов в определенной директории и который реализует интерфейс плагина - PullRequest
0 голосов
/ 06 июля 2011

как я могу создать с помощью php экземпляр всех плагинов, которые реализуют интерфейс плагина и сохранены в определенной директории плагинов.

Я сделал что-то в c # как этот

Assembly assembly = Assembly.LoadFrom(pFileName);
foreach (Type type in assembly.GetTypes()){
if (type.IsPublic){
if (!type.IsAbstract){           
Type typeInterface = type.GetInterface(pTypeInterface.ToString(), true);
if (typeInterface != null){
try{
object plugin = Activator.CreateInstance(pluginInterfaceType);

Есть ли способ перевести это в php?

Какой самый простой и безопасный способ реализовать это?

привет

1 Ответ

0 голосов
/ 06 июля 2011

Как динамический язык, PHP делает это намного проще.Как только у вас есть фактическое имя класса в виде строки, вы можете создать его экземпляр.Тогда вам просто нужно проверить, реализует ли экземпляр ожидаемый интерфейс:

$pluginClass = 'My_Plugin';
$instance = new $pluginClass();
if(!$instance instanceof My_Interface) {
    throw new Exception(get_class($instance) . ' does not implement My_Interface');
}

Чтобы загрузить класс, вы должны прочитать автозагрузку классов в PHP .Если вы хотите, чтобы все классы в определенной папке плагинов были доступны, вам просто требуется_once любой файл * .php в этой папке.

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