Magento: безопасно ли переопределять класс ядра event observer?

#php #events #magento #overriding #observer-pattern

#php #Мероприятия #magento #переопределение #observer-pattern

Вопрос:

Предположим, в core есть класс event observer. Я могу переопределить это. Но безопасно ли это? Я имею в виду, влияет ли это на другие функции класса observer?

Например, если в классе core observer есть две функции, а я переопределил только одну функцию. Тогда другая функция будет работать безопасно, как и раньше.

Я думаю, что это похоже на переопределение модели и должно быть безопасным. Я прав?

Редактировать:-

Например,

  • В ядре есть класс CoreClassA.
  • В CoreClassA есть функция coreFunctionA.
  • В этой основной функции отправляется событие core_event_a.
  • Другой модуль ядра CoreModuleB создает event observer с помощью core_event_a.
  • Итак, всякий раз, когда отправляется core_event_a, вызывается наблюдатель событий CoreModuleB.
  • Предположим, что наблюдатель событий CoreModuleB содержит две функции. Один для действия отправки core_event_a (назовем его eventDispatchA), а другой для какого-либо другого действия отправки события (скажем, eventDispatchX).
  • В моем пользовательском модуле я хочу переопределить eventDispatchA. В принципе, я хочу изменить некоторый код в eventDispatchA или, возможно, я просто захочу пропустить эту функцию. Я могу переопределить это. Но повлияет ли это на eventDispatchX, если я это сделаю? Или есть какой-либо другой лучший способ вместо переопределения event observer?

Комментарии:

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

2. Отредактировано. Надеюсь, я не сделал это более сложным. 🙂

Ответ №1:

Скорее всего, так и будет, но если вы переопределяете что-то, что могут использовать другие, всегда стоит создать что-то подобное:

     public function samefunction($object){
        if(mymodueleisused){
            //do your different thing
        } else {
           return parent::samefunction();
        }
    }
  

и, как вам говорили другие: «если вам нужно изменить / переопределить ядро, то вы, вероятно, делаете это неправильно», и лучше спросить по-другому, описав, что вы хотите сделать и почему

Комментарии:

1. Спасибо. Я прошу дать общий обзор. Когда я переопределю Observer, я буду расширять его базовый класс. Итак, я думаю, что это не повлияет на другие функции базового класса.

2. зависит от того, если вы расширяете и переопределяете метод, то это, безусловно, произойдет, если вы добавите новые методы, и они не вызываются из методов ядра, тогда нет

3. приятный штрих для проверки, какой модуль использует переопределение