允许PHP应用程序使用插件的最佳方法
我正在用PHP启动一个新的Web应用程序,这次我想创建一些可以通过使用插件界面扩展的东西。
如何将“挂钩”写入其代码,以便插件可以附加到特定事件?
回答:
您可以使用观察者模式。实现此目的的简单功能方法:
<?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 application4 + 5 = 9
4 * 5 = 20
对于此示例源代码,必须在要扩展的实际源代码之前声明所有插件。我提供了一个示例,说明如何处理传递给插件的单个或多个值。最困难的部分是编写实际文档,该文档列出了传递给每个挂钩的参数。
这只是在PHP中完成插件系统的一种方法。有更好的选择,我建议您查看WordPress文档以获取更多信息。
以上是 允许PHP应用程序使用插件的最佳方法 的全部内容, 来源链接: utcz.com/qa/413412.html