我正在尝试使用PHP实现一个简单的add_hook
函数,但是在更新必须存储可用/设置挂钩的全局数组时遇到了一些麻烦。如果我使用add_hook
中的main.php
可以正常工作,并且可以根据需要添加任意数量的钩子,但是如果从包含的文件中执行相同的操作,则$hooks
var只能从内部更新。功能。
main.php
require dirname(__FILE__) . '/includes/functions.php';
$hooks = array();
function add_hook($hook_name, $function)
{
global $hooks;
$hooks[$hook_name] = $function;
}
add_hook("hook_name", "some_function");
function execute_hook($hook_name)
{
global $hooks;
foreach ($hooks[$hook_name] as $function) {
if (function_exists($function[0])) {
call_user_func($function[0]);
}
}
}
function execute_hooks($hook_name)
{
global $hooks;
print_r($hooks);
if (array_key_exists($hook_name, $hooks)) {
execute_hook($hook_name);
}
}
print_r($hooks);
// Array ( [hook_name] => some_function )
// missing the array added from functions.php
functions.php
add_hook("build_admin_menu", "hd_modify_menu");
如果我在print_r
函数结尾处add_hook
,它将打印添加的钩子,但是我认为问题是“全局” $hooks
似乎没有更新与来自add_hook
的{{1}}通话。
任何人都可以向我解释为什么会发生这种情况以及我该如何解决?非常感谢!