PHP:包含单独的全局范围

时间:2012-09-18 10:28:32

标签: php scope global

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

示例:

file project1.php:

$var1 = 'var1';

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

print1();

file project2.php:

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

$var2 = 'var2';

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

print2();
load1();

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

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

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

2 个答案:

答案 0 :(得分:0)

如果你真的需要在函数中包含include,请查看PHP Namespaces

project2.php:

namespace project2 {
    $var2 = 'var2';

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

    print2();
}

namespace project1 {
    function load1() {
        global $var1;
        include('project1.php');
    }
    load1();
}

答案 1 :(得分:0)

不可能有单独的GLOBAL上下文。无论发生什么,全球背景的唯一目的是“全球化”。

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

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

成为:

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