0

我想合并两个 php 项目。这两个项目都使用全局变量,所以我希望有单独的全局范围。

例子:

文件 project1.php:

$var1 = 'var1';

function print1() {
  global $var1;
  echo $var1;
}

print1();

文件 project2.php:

function load1() {
  include('project1.php');
}

$var2 = 'var2';

function print2() {
  global $var2;
  echo $var2;
}

print2();
load1();

这将按预期执行 project2,但 project1 会失败,因为 $var1 不在全局范围内,而是在 load1() 的范围内。

一种可能的解决方法是调用global $var1load1() ,但这会混合两个全局范围(混乱)并且会很复杂,因为 reallive project2 有许多全局变量,我必须检查每次更新是否有任何新变量。

因此,如果我可以为 project1 创建一个单独的全局范围,那将是最好的。那可能吗?

4

2 回答 2

0

如果您真的必须将您的包含包装在一个函数中,请查看PHP Namespaces

项目2.php:

namespace project2 {
    $var2 = 'var2';

    function print2() {
        global $var2;
        echo $var2;
    }

    print2();
}

namespace project1 {
    function load1() {
        global $var1;
        include('project1.php');
    }
    load1();
}
于 2012-09-18T10:47:45.833 回答
0

不可能有单独的 GLOBAL 上下文。全局上下文的全局的唯一目的是无论发生什么都是“全局的”。

为了解决这个问题,您应该“上下文化”您的代码,将全局变量重构为函数参数:

function print2() {
  global $var2;
  echo $var2;
}

变成:

function print2($var2) {
  echo $var2;
}
于 2012-09-18T10:50:04.647 回答