通过函数中包含的文件内的引用分配的全局变量

Global variable assigned by reference inside a file included in a function

下面是某个第 3 方模块如何将第 3 方应用程序添加到页面中的简化示例。该应用程序通常是独立的并可以直接访问,但该模块使用一个函数将应用程序包含在特定的 URL.

module.php:

if ($path == 'some/specific/url') {
  load_app();
}

function load_app() {
  include('./app.php');
}

app.php:

// For this example, assume $_SESSION['a'] already exists as an array of strings.

global $b;

$b = &$_SESSION['a'];

do_something();

function do_something() {
  global $b;

  // Do something with $b.

  // Problem: $b is always NULL when it should be an array.
}

问题是 app.php 中的行 $b = &$_SESSION['a']; 似乎无法正常工作,所以 $GLOBALS['b'] 仍然是 NULL,这意味着 $b 在 [=] 中也是 NULL 15=].

这似乎是因为 app.php 包含在 module.php 的一个函数中,所以我认为这与 app.php 的范围和引用赋值有关。

不幸的是,我根本无法修改app.php并且我无法将include()移到module.php中的load_app()函数之外,所以有没有module.php 可以通过任何其他方式进行更改以使 app.php 正常工作吗?

为了传播全局变量,在不同的地方插入 global $b; 进行了多次尝试和错误,最终对我有用的是:

module.php:

function load_app() {
  $GLOBALS['b'] = &$_SESSION['a'];
  include('./app.php');
}

似乎在module.php中将引用直接赋值给$GLOBALS['b']可以让app.php在不做任何修改的情况下正常工作。将引用分配给 global $b 不会。