Очевидная причина использовать перезапись вместо плагина, когда вам нужно переопределить закрытый, защищенный или финальный метод .
Но также рассмотрим следующие сценарии.
1-й сценарий (абсолютный порядок сортировки):
Переписывание может быть полезно, когда вам нужно, чтобы ваш код запускался перед плагинами . Я знаю, что вы можете сделать это, установив плагин sortOrder
, но вы не можете быть уверены, что ваш код всегда будет первым, когда кто-то (не вы) собирается установить сторонние компоненты.
2-й сценарий (исключите код):
Если вам нужно исключить или переписать только часть кода в методе, плагин может быть неоптимальным способом. Я знаю, что вы можете использовать around
плагин и избегать вызова proceed
, но это может сломать другие плагины в стеке.
3-й сценарий (стиль кода):
Вы должны использовать перезапись, когда вам нужно переписать поведение, плагины должны использоваться для изменения вывода или выполнения кода до / после.
Плагин, всегда должен запускать оригинальный код, чтобы не сломать другие модули.
Мой вывод:
Если вы можете рассматривать основной метод как черный ящик с входом и одним выходом, и вы не осведомлены о его внутренних механизмах, тогда плагин может быть лучшим вариантом.
Если вам нужно изменить внутреннее поведение , лучшим вариантом будет перезапись.