Обновление PHP Глобальная переменная с использованием вызова из включенного файла - Проблема определения объема - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь реализовать простую функцию add_hook с использованием PHP, но сталкиваюсь с некоторыми проблемами при обновлении глобального массива, в котором я должен хранить доступные / установленные хуки. Если я использую 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");

Если I print_r в конце функции add_hook, она напечатает добавленный хук, но я думаю, что проблема в том, что "global" $hooks не обновляется при вызове add_hook от functions.php.

Может кто-нибудь объяснить мне, почему это происходит и что я могу сделать, чтобы исправить? Очень ценится!

1 Ответ

0 голосов
/ 06 июня 2019

Пожалуйста, проверьте ваш код

require dirname(__FILE__) . '/includes/functions.php'; 

   // $hooks = array();

Массив $ hook переназначается после включения functions.php. Вы должны прокомментировать / удалить его. как показано выше.

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...