01.
<?php
02.
/*
03.
* 在插件列表中要添加的插件名
04.
* @ pragma string $hook 插件列表名
05.
* @ pragma string $actionFunc 插件名
06.
*/
07.
function addAction($hook, $actionFunc){
08.
global $emHooks;
09.
if (!@in_array($actionFunc, $emHooks[$hook])){
10.
$emHooks[$hook][] = $actionFunc;
11.
}
12.
return true;
13.
}
14.
/**
15.
* 插件钩子的执行函数。也就是所谓的钩子的埋入点函数
16.
* @param string $hook 插件列表名
17.
*/
18.
function doAction($hook){
19.
global $emHooks;
20.
$args = array_slice(func_get_args(), 1);//获取其他参数
21.
if (isset($emHooks[$hook])){
22.
foreach ($emHooks[$hook] as $function){
23.
$string = call_user_func_array($function, $args);
24.
}
25.
}
26.
}
01.
define("APP_ROOT",str_replace("\\","/",dirname(__FILE__))."/");
02.
require("function.php"); //加载功能函数
03.
/**
04.
* 加载插件路径
05.
* 一般情况下,我们要先存储和判断插件是否激活,
06.
*你可以保存在数据库中,也可以保存在文件配置缓存中
07.
*/
08.
function load_plugins_file($plugin) {
09.
//要判断和检查。
10.
if(is_string($plugin) && preg_match("/^[\w\-\/]+$/", $plugin) &&file_exists(APP_ROOT."plugins/".$plugin.".php")){
11.
require APP_ROOT."plugins/".$plugin.".php";
12.
}
13.
}
14.
//演示的插件例子
15.
$pluginsName = array("check_all","login");
16.
foreach($pluginsName as $plugin){
17.
load_plugins_file($plugin);
18.
}
19.
//埋下的钩子
20.
doAction("fbbin");
1.
<?php
2.
function check_all() {
3.
echo "<p>全部通过</p>";
4.
}
5.
addAction("fbbin","check_all");//像fbbin插件列表中添加插件,那么之后执行的doAction函数就能在全局变量中找到这个插件了,那么这样子,这个插件便会被执行。
6.
?>