require_once到函数内的全局范围

时间:2012-01-25 11:48:10

标签: php scope 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,那么最简单的解决方案是什么? (请不要沉重的框架。)

编辑:它也适用于PHP 5.2。

4 个答案:

答案 0 :(得分:5)

上述答案是正确的,您可以使用global来获取所需内容。 在包含的文件中只是在文件的开头声明变量global,这样代码将在函数范围内运行,但它会改变全局变量(是的,你必须小心并声明你需要改变的全局变量但它应该工作),例如:

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

并在a.php文件中:

global $globalVariable;
$globalVariable="text";

答案 1 :(得分:5)

总结所有信息:

  1. 功能不是问题,无论如何它们都是全球性的

  2. 对于全局变量,有两个选项:

    • 在包含的文件中将它们声明为全局
    • 在该函数中将它们声明为全局(在我的情况下为projects_init()

答案 2 :(得分:2)

功能不是问题(ref):

  

PHP中的所有函数和类都具有全局范围 - 即使它们是在内部定义的,也可以在函数外部调用它们,反之亦然。

关于全局变量:在关于require等范围的现有问题中,范围是在使用范围内定义的。如果您还需要其他内容,则会有很多答案(my take)显示如何处理全局变量,大多数使用get_defined_vars

答案 3 :(得分:1)

您可以使用global将变量放在全局范围内。

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