之前看了许多篇关于PHP钩子(hook)的解析文章,不是很懂。
大多都描述的太过复杂,或者直接抛出一个实例草草说明其中各个函数的用处就over了。
那么今天来谈谈我对钩子的理解。
假设有一个Plugin.class.php的插件类文件【本例中不考虑用数据库存储插件信息】
- 初始化,加载钩子的函数 Plugin::Init()
假设程序中有一个plugins的目录,目录中均是单个的插件文件。那么本函数会遍历目录下的文件,读取每个插件的信息,并把信息push进一个插件数组里。
- 等待程序运行到 钩子 处 Plugin::Hook(‘hook点的名称’)
注:钩子不是PHP或者系统本身就自带的,是程序员手动在一些认为需要拓展的地方加入嵌入点(hook),然后程序执行到此处触发Hook函数。
- 检测当前hook点有哪些插件需要被触发,则运行那些插件
如2中的示例,在Hook函数中有一个hook名称的参数,从1中的插件数组中取出有该hook名称的插件,运行该插件即可。
插件数组示例:
其中包含了hook点下的插件类,其拥有的函数名,插件所在目录等等
![]()