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

时间:2015-07-03 15:05:42

标签: php reference scope php-include

以下是某个第三方模块如何将第三方应用程序添加到页面中的简化示例。该应用程序通常是独立的并直接访问,但该模块使用一个函数将应用程序包含在特定的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,这意味着$bdo_something()内也是NULL。

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

不幸的是,我根本无法修改app.php而且我无法将include()移到module.php中的load_app()函数之外,所以该模块还有其他任何方式。可以修改php以使app.php按预期工作吗?

1 个答案:

答案 0 :(得分:0)

经过多次试验和错误,在各个地方插入global $b;以传播全局变量,最终对我有用的是:

<强> module.php:

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

似乎直接将引用分配给module.php中的$GLOBALS['b']允许app.php无需任何修改即可正常工作。将引用分配给global $b不会。