Подтвердить что ты не робот

Require_once для глобальной области действия внутри функции

Кажется, что если require_once вызывается внутри функции, включенный файл не расширяет область глобальной переменной. Как require_once файл для глобальной области видимости внутри функции?

То, что я пытаюсь сделать, это какой-то динамический загрузчик модулей:

function projects_init()
{
        ...
        foreach ($projects as $p) {
                require_once($p['PHPFile']);

                $init_func = $p['init'];
                if ($init_func)
                        $init_func();
        }
}

Если невозможно использовать require_once таким образом, для чего это самое простое решение? (Пожалуйста, никаких тяжелых рамок.)

EDIT: он также должен работать для PHP 5.2.

4b9b3361

Ответ 1

Подводя итог всей информации:

  • функции не являются проблемой, они все равно будут глобальными.

  • для глобальных переменных есть 2 варианта:

    • объявить их глобальными во включенном файле
    • объявить их глобальными в этой функции (projects_init() в моем случае)

Ответ 2

Вышеуказанный ответ прав, вы можете использовать global, чтобы получить то, что вам нужно. В включенном файле просто объявите переменные global в начале файла, таким образом, код будет запущен в области функций, но он изменит глобальные переменные (да, вы должны быть осторожны и объявить все, что вам нужно изменить, как глобальное но он должен работать), например:

function a() {
     require_once("a.php");
}
a();
echo $globalVariable;

и в файле a.php:

global $globalVariable;
$globalVariable="text";

Ответ 4

Функции не являются проблемой (ref):

Все функции и классы в PHP имеют глобальную область действия - их можно вызывать вне функции, даже если они были определены внутри и наоборот.

О глобальных переменных. Как и в существующем вопросе, касающемся области require и т.п., область определения определяется там, где это используется. Если вам нужно что-то еще, есть многочисленные ответы (мой прием), которые показывают, как справляться с глобальными переменными, большинство из которых использует get_defined_vars.