【发布时间】:2015-07-03 15:05:42
【问题描述】:
以下是某个第 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 在 do_something() 中也是 NULL。
这似乎是因为 app.php 包含在 module.php 的函数中,所以我认为这与 app.php 的范围和引用分配有关。
不幸的是,我根本无法修改 app.php,也无法将 include() 移到 module.php 中的 load_app() 函数之外,所以有没有其他方法可以更改 module.php让 app.php 按预期工作?
【问题讨论】:
-
您正在引用 PHP _SESSION 但我没有看到任何 session_start()...
-
@marekful 运行 module.php 的框架会创建一个会话,如果直接访问 app.php 也会创建一个会话,但我尽量简化示例。我们可以假设 $_SESSION['a'] 总是作为数组存在,所以我省略了所有会话代码。
标签: php reference scope php-include