Plugins are likely one of the most powerful features of Magento. They allow us to modify the behavior of public class functions by intercepting a function call and running code before, after, or around that function call.
Before we eagerly start using them, it is worth emphasizing how plugins can't be used on the following:
- Final methods
- Final classes
- Non-public methods
- Class methods (such as static methods)
- __construct
- Virtual types
- Objects that are instantiated before Magento or FrameworkInterception is bootstrapped
Plugins can be used on the following:
- Classes
- Interfaces
- Abstract classes
- Parent classes
By doing a lookup for the <plugin string across the entire <MAGENTO_DIR> directory's di.xml files, we can see hundreds of plugin examples spread across the majority of Magento's modules.