似乎如果在函数内调用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
,那么最简单的解决方案是什么? (请不要沉重的框架。)
编辑:它也适用于PHP 5.2。
答案 0 :(得分:5)
上述答案是正确的,您可以使用global
来获取所需内容。
在包含的文件中只是在文件的开头声明变量global,这样代码将在函数范围内运行,但它会改变全局变量(是的,你必须小心并声明你需要改变的全局变量但它应该工作),例如:
function a() {
require_once("a.php");
}
a();
echo $globalVariable;
并在a.php文件中:
global $globalVariable;
$globalVariable="text";
答案 1 :(得分:5)
总结所有信息:
功能不是问题,无论如何它们都是全球性的
对于全局变量,有两个选项:
projects_init()
)答案 2 :(得分:2)
功能不是问题(ref):
PHP中的所有函数和类都具有全局范围 - 即使它们是在内部定义的,也可以在函数外部调用它们,反之亦然。
关于全局变量:在关于require
等范围的现有问题中,范围是在使用范围内定义的。如果您还需要其他内容,则会有很多答案(my take)显示如何处理全局变量,大多数使用get_defined_vars
。
答案 3 :(得分:1)
您可以使用global
将变量放在全局范围内。