require_once到函数内的全局范围

TMS*_*TMS 12 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();
        }
}
Run Code Online (Sandbox Code Playgroud)

如果无法使用require_once这种方式,最简单的解决方案是什么?(请不要沉重的框架.)

编辑:它也适用于PHP 5.2.

Ale*_*ncu 5

上面的答案是对的,你可以用它global来得到你需要的东西.在包含的文件中只是在文件的开头声明变量global,这样代码将在函数范围内运行,但它会改变全局变量(是的,你必须小心并声明你需要改变的全局变量但它应该工作),例如:

function a() {
     require_once("a.php");
}
a();
echo $globalVariable;
Run Code Online (Sandbox Code Playgroud)

并在a.php文件中:

global $globalVariable;
$globalVariable="text";
Run Code Online (Sandbox Code Playgroud)


TMS*_*TMS 5

总结所有信息:

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

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

    • 在包含的文件中将它们声明为全局
    • 在那个函数中声明它们是全局的(projects_init()在我的例子中)

  • 3.不,似乎不可能在函数内部应用require_once的全局范围.(悲伤的脸.) (3认同)