Tip: 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 activate it when you don’t need it. Disable/delete it when necessary; and whether it is activated or disabled, it will 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 of plug-ins (Lookup)
Dynamic triggering of plug-ins
The implementation of the above two points will not affect the operation of the core program
To implement plug-ins in the program, the first thing we should think of is to define different hooks; "Hooks " is a very vivid logical concept. 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, such as the hook I mentioned earlier about comment spam filtering. Usually it has been designed by the core system developers into the comment processing logic; another category Hooks may be customized by users (developed by third-party developers) and usually exist in the presentation layer, such as an ordinary PHP form display page.
Maybe you find the above words boring and drowsy; 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 core of the entire mechanism is divided into three major parts:
A plug-in manager class: This is the core of the core. It is an application global Global object. It has three main responsibilities:
is responsible for monitoring all registered plug-ins and instantiating these plug-in objects.
Responsible for registering all plugins.
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 the following display code See this rule.
Plug-in triggering: 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.