require_once to global scope within a function

2020-03-10 05:33发布

It seems that if require_once is called within function, the included file doesn't extend the global variable scope. How to require_once a file to global scope from within a function?

What I'm trying to do is some dynamic module loader:

function projects_init()
{
        ...
        foreach ($projects as $p) {
                require_once($p['PHPFile']);

                $init_func = $p['init'];
                if ($init_func)
                        $init_func();
        }
}

If it is not possible to use require_once that way, what is the simplest solution for this? (Please no heavy frameworks.)

EDIT: it should also work for PHP 5.2.

4条回答
不美不萌又怎样
2楼-- · 2020-03-10 06:17

To summarize all the information:

  1. functions are not an issue, they will be global anyway this way

  2. for global variables, there are 2 options:

    • declare them as global in the included file
    • declare them as global in that function (projects_init() in my case)
查看更多
干净又极端
3楼-- · 2020-03-10 06:24

The above answer is right, you can use global to get what you need. In the included file just declare the variables global at the beginning of the file, this way the code will run in the function scope but it will change the global variables(yes, you have to be careful and declare everything you need to change as global but it should work), example:

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

and in the a.php file:

global $globalVariable;
$globalVariable="text";
查看更多
贼婆χ
4楼-- · 2020-03-10 06:25

Functions are not an issue (ref):

All functions and classes in PHP have the global scope - they can be called outside a function even if they were defined inside and vice versa.

About global variables: As in an existing question regarding the scope of require and the like, the scope is defined where the use is. If you need something else, there are numerous answers (my take) that show how to deal with global variables, most making use of get_defined_vars.

查看更多
孤傲高冷的网名
5楼-- · 2020-03-10 06:30

You can use global to put a variable in the global scope.

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

查看更多
登录 后发表回答