我正在用PHP开始一个新的Web应用程序,这次我想创建一些人们可以使用插件接口扩展的东西。
如何将“钩子”写入代码中以便插件可以附加到特定事件?
实现方法:
您可以使用Observer模式。一种简单的功能方法来完成此任务:
<?php
/** Plugin system **/
$listeners = array();
/* Create an entry point for plugins */
function hook() {
global $listeners;
$num_args = func_num_args();
$args = func_get_args();
if($num_args < 2)
trigger_error(\"Insufficient arguments\", E_USER_ERROR);
// Hook name should always be first argument
$hook_name = array_shift($args);
if(!isset($listeners[$hook_name]))
return; // No plugins have registered this hook
foreach($listeners[$hook_name] as $func) {
$args = $func($args);
}
return $args;
}
/* Attach a function to a hook */
function add_listener($hook, $function_name) {
global $listeners;
$listeners[$hook][] = $function_name;
}
/////////////////////////
/** Sample Plugin **/
add_listener(\'a_b\', \'my_plugin_func1\');
add_listener(\'str\', \'my_plugin_func2\');
function my_plugin_func1($args) {
return array(4, 5);
}
function my_plugin_func2($args) {
return str_replace(\'sample\', \'CRAZY\', $args[0]);
}
/////////////////////////
/** Sample Application **/
$a = 1;
$b = 2;
list($a, $b) = hook(\'a_b\', $a, $b);
$str = \"This is my sample application\\n\";
$str .= \"$a + $b = \".($a+$b).\"\\n\";
$str .= \"$a * $b = \".($a*$b).\"\\n\";
$str = hook(\'str\', $str);
echo $str;
?>
输出:
This is my CRAZY application
4 + 5 = 9
4 * 5 = 20
对于此示例源代码,您必须在要扩展的实际源代码之前声明所有插件。我已经包含了一个如何处理传递给插件的单个或多个值的示例。最难的部分是编写实际文档,其中列出了传递给每个钩子的参数
继续阅读与本文标签相同的文章
上一篇 :
PHP删除目录下所有的文件
-
微博刷量现象再遭曝光:一条350万阅读量的微博为何转化量却为零?
2026-05-15栏目: 教程
-
富士康“败走”印度!只要加班就辞职,郭台铭还能“霸气”起来?
2026-05-15栏目: 教程
-
互联网的下半场,在大小城市里飞驰的电瓶车上
2026-05-15栏目: 教程
-
Robotframework-RED-指定测试报告存放的路径
2026-05-15栏目: 教程
-
株洲首个数据中心站投运
2026-05-15栏目: 教程
