13

似乎如果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

4 回答 4

7

总结所有信息:

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

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

    • 在包含的文件中将它们声明为全局
    • 在该函数中将它们声明为全局(projects_init()在我的情况下)
于 2012-01-26T09:23:14.757 回答
5

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

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

在 a.php 文件中:

global $globalVariable;
$globalVariable="text";
于 2012-01-25T12:07:33.880 回答
2

函数不是问题(ref):

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

关于全局变量:与关于范围等的现有问题require一样,范围是在使用的地方定义的。如果你需要别的东西,有很多答案(我的看法)展示了如何处理全局变量,大多数使用get_defined_vars.

于 2012-01-26T10:24:56.293 回答
1

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

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

于 2012-01-25T11:54:19.500 回答