>我正在尝试使用 PHP 实现一个简单的add_hook
函数,但在更新我必须存储可用/设置钩子的全局数组时遇到了一些麻烦。如果我使用add_hook
frommain.php
它工作正常,我可以根据需要添加任意数量的钩子,但如果从包含的文件执行相同的操作,则$hooks
var 仅从函数内部更新。
主.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
函数.php
add_hook("build_admin_menu", "hd_modify_menu");
如果我在add_hook
函数的末尾print_r
,它将打印添加的钩子,但我认为问题是"全局"$hooks
似乎没有随着functions.php
的add_hook
调用而更新。
谁能向我解释为什么会发生这种情况以及我可以做些什么来解决?非常感谢!
请检查您的代码
require dirname(__FILE__) . '/includes/functions.php';
// $hooks = array();
$hook数组在包含函数后重新分配.php . 您需要注释/删除它。 如上图。
希望这对你有帮助