parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Жаль, что вы совсем не используете ООП...

Sumo 24.06 13:59 / 25.06 08:28

... и лишены наследования и полиморфизма. Сейчас у вас обычная процедурная программа, которая использует классы как некое подобие модулей, но не как прототип объектов. В процедурном программировании можно сымитировать DI/IOC, передавая в процедуры ссылки на другие процедуры.

Небольшой пример. Изменения поведение функции через передачу ссылки:
@CLASS
explainer

@explain[aOptions]
  ...
  $lObserverMod[^if(def $aOptions.observer_func){$aOptions.observer_func}{$H:observer_mod}]
  ^lObserverMod[]
...
И где-то в коде вызываем:
^explainer:explain[$.observer_func[$MH:observer_mod]]
Я бы рекомендовал навсегда забыть про статические классы и использовать только объекты, которые создаются через конструктор классов. :)