Архитектура плагина php

я просто играю с php, чтобы создать архитектуру плагина.
для этого я использую шаблон прослушивателя событий (посредник), где код может прослушивать / запускать событие.

Мой реальный вопрос — как сделать объект слушателя доступным через приложение?
Единственные решения, о которых я могу подумать сейчас, делают основной класс слушателя / наблюдателя одиночным, поэтому любой код из любого места может зарегистрировать слушателя.

$listener = Plugin::getInstance();
$listener->addEventListener('savePost', ....);

и для стрельбы также я могу использовать тот же процесс.

ИЛИ ЖЕ

например, сделать статичным только зарегистрированный массив событий

private static $registeredEvents = array();
public function addEventListener($eventName, Closure $c){
self::$registeredEvents[$eventName] = $c;
}

Если я делаю это независимо от того, как объект плагина / слушателя предоставляется любому клиентскому коду
тот же контейнер ($ selectedEvents) будет использоваться.

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

Так что, пожалуйста, кто-нибудь покажет мне более эффективный способ сделать это.

0

Решение

Синглтон Класс & Статический $ selectedEvents — хороший способ сделать это
Вы не загружаете память, поскольку вы используете только статический экземпляр и статические registerEvents, которые выделены только один.

В PHP, когда вы работаете с объектами, вы на самом деле работаете с указателями этих объектов

Вы также можете использовать реестр (например, Zend_Registry) и хранить единственный и единственный экземпляр в реестре.

Образец:

$registry = Zend_Registry::getInstance();
$registry->set('listener', $listener); // or
// $registry->listener = $listener;

Для загрузки вы будете использовать:

// $registry = Zend_Registry::getInstance(); // if needed
$registry->listener->addEventListener();

Вы также можете сделать функцию статической, и вам даже не нужно создавать экземпляры, вы используете только:

My_Listener_Class::addEventListener();

Для большего количества идей рассмотрите проверку этого вопроса:

http://stackoverflow.com/questions/42/best-way-to-allow-plugins-for-a-php-application

Это может помочь вам. Он содержит несколько хороших способов интеграции плагинов в php.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]