muhammad_97
@muhammad_97
PHP-разработчик

Реализация плагина-фильтра на PHP?

Добрый вечер. Возникла необходимость реализация фильтра (как в WordPress). К примеру есть плагин, подписанный на событие Event:

$x = 'Исходное значение';

PluginManager::fire('Event');

echo $x; // должно напечатать "Измененное значение"


В методе fire наблюдатель как-нибудь должен поменять значение. Была такая идея:

$x = 'Исходное значение';

$parameters = compact ('x');

$changedVariables = PluginManager::fire('Event', $parameters);

extract($changedVariables, EXTR_OVERWRITE );

echo $x; // должно напечатать "Измененное значение"


Может быть есть другие способы решения этой задачи, чтобы не было так громоздко (как во втором случае)?
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Проще всего сменить значение через глобальный массив хранения значений (используется единственная "переменная-реестр").
Ответ написан
mr_T
@mr_T
Web-разработчик
По поводу передачи параметров по ссылке - если смущает запоминание порядка передачи, то можно передавать ассоциативный массив, значения в котором будут записаны по ссылке типа такого:
$filter -> fire(array('arg1' => &$arg1, 'arg2' => &$arg2));

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

Войдите, чтобы написать ответ

Похожие вопросы