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.

Solutions Collecting From Web of "require_once для глобальной области действия внутри функции"

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

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

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

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

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

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

и в файле a.php:

 global $globalVariable; $globalVariable="text"; 

Вы можете использовать global чтобы поместить переменную в глобальную область.

http://php.net/manual/en/language.variables.scope.php

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

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

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