5.2. 插件运行原理

在 bzfshop 的程序初始化过程中(见 shop/index.php 文件),我们会在真实调用功能代码之前加载插件并且完成插件的初始化,插件可以在这里 "注册自己的行为" 甚至 "修改系统的行为",然后程序才进入实际的代码操作。由于插件注册了自己的行为,所以实际代码操作有可能被插件所影响,从而达到插件希望的结果。下面是插件运行机制图(以 shop/index.php 为例,其它系统类似):

图 5.1. 插件运行机制

dev_plugin_mechanism.png

从上面的图可以看到,系统在初始化的时候会加载插件、完成插件的初始化,然后才正式进入代码运行($f3→run())。代码运行完毕会卸载插件(注意:这里的卸载指的是类似 __destruct ,不是软件卸载)。插件在加载之后设置自己的运行环境,然后等待系统的调用,如果系统调用了插件的功能则运行了插件的代码,否则插件没有任何影响。