Tips: An implementation solution for the plug-in mechanism in PHP.
The starting point of this article is my understanding of the plug-in mechanism and its implementation in PHP. This solution is only one of the implementation solutions of the plug-in mechanism in PHP. Write it down and share it with everyone. Everyone is welcome to discuss it.
Plug-in, also known as Plug-in, refers to a specific type of functional module (usually implemented by third-party developers). Its characteristics are: activate it when you need it, and disable/delete it when you don’t need it. It; and whether it is activated or disabled, it does not affect the operation of the core module of the system. In other words, the plug-in is a non-intrusive modular design that achieves loose coupling between the core program and the plug-in program. A typical example is the numerous third-party plug-ins in WordPress, such as the Akimet plug-in, which is used to filter spam on user comments.
A robust plug-in mechanism, I think, must have the following characteristics:
Dynamic monitoring and loading (Lookup) of plug-ins
Dynamic triggering of plug-ins
The implementation of the above two points will not affect the operation of the core program
To be implemented in the program When implementing plug-ins, the first thing we should think of is to define different hooks; "hook" is a very vivid logical concept, and you can think of it as a plug-in trigger condition reserved by the system. Its logic principle is as follows: when the system executes a certain hook, it will determine whether the conditions of the hook are met; if it is met, it will first call the function specified by the hook, and then return to continue executing the rest of the program; if it is not met, it will first call the function specified by the hook. , just skip it. This is a bit like "interrupt protection" logic in assembly.
Some hooks may have been designed by the system in advance. For example, the hook I mentioned earlier about comment spam filtering is usually designed by the core system developers into the comment processing logic; another type of hook may be Customized by users (formulated by third-party developers), usually exists in the presentation layer, such as an ordinary PHP form display page.
Maybe you feel that the above words are boring and make you sleepy; but to understand the code I wrote below, it is essential to understand the above principles.
The following is the core implementation of the plug-in mechanism in PHP. The entire mechanism is divided into three major blocks:
A plug-in manager class: This is the core of the core. It is an application global Global object. It has three main responsibilities:
Responsible for monitoring all registered plug-ins and instantiating these plug-in objects.
Responsible for registering all plug-ins.
When the hook condition is met, the corresponding object method is triggered.
Plug-in function implementation: This is mostly done by third-party developers, but certain rules need to be followed. This rule is stipulated by the plug-in mechanism and varies depending on the plug-in mechanism. You will see this rule in the display code below .
Triggering of the plug-in: that is, the triggering condition of the hook. Specifically, this is a small piece of code that is placed where you need the plug-in implementation to trigger this hook.