#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. приятный штрих для проверки, какой модуль использует переопределение