PHP使用包含文件中的调用更新全局变量-作用域问题

时间:2019-06-05 04:04:19

标签: php scope global-variables global

我正在尝试使用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}}通话。

任何人都可以向我解释为什么会发生这种情况以及我该如何解决?非常感谢!

0 个答案:

没有答案