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