Кажется, что если 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.
Подводя итог всей информации:
функции не являются проблемой, они все равно будут глобальными
для глобальных переменных существует 2 варианта:
projects_init()
в моем случае) Вышеприведенный ответ прав, вы можете использовать global
чтобы получить то, что вам нужно. В включенном файле просто объявите переменные global в начале файла, таким образом, код будет запущен в области функций, но он изменит глобальные переменные (да, вы должны быть осторожны и объявить все, что вам нужно изменить, как глобальное но он должен работать), например:
function a() { require_once("a.php"); } a(); echo $globalVariable;
и в файле a.php:
global $globalVariable; $globalVariable="text";
Вы можете использовать global
чтобы поместить переменную в глобальную область.
Функции не являются проблемой ( ref ):
Все функции и классы в PHP имеют глобальную область действия – их можно вызывать вне функции, даже если они были определены внутри и наоборот.
О глобальных переменных. Как и в существующем вопросе, касающемся области require
и т. П., Область определения определяется там, где это используется. Если вам нужно что-то еще, есть множество ответов ( мой вопрос ), которые показывают, как бороться с глобальными переменными, большинство из get_defined_vars
использует get_defined_vars
.