通过函数中包含的文件内的引用分配的全局变量
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
不会。
下面是某个第 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
不会。