2012-09-18 83 views
0

我想合并两个php项目。这两个项目都使用全局变量,所以我想要有单独的全局范围。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(); 

这将只是按预期执行项目2,但因为$ VAR1不PROJECT1会失败在全局范围内,但在load1()的范围内。

一个可能的解决方法是在load1()中调用global $var1但是这会混合两个全局作用域(messy)并且会很复杂,因为reallive project2有许多全局变量,我将不得不检查是否有任何新的每个更新的。

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

+3

现在,你知道为什么**不使用全局变量!! **准备意大利面。 – JvdBerg

+7

简短回答:没有。长答案:上帝没有。您在这里遇到的问题的实际解决方案是停止使用全局变量,并且只考虑您的顶级范围,而不考虑是否是全局范围。 – DaveRandom

+1

你也可以尝试命名空间为不同的文件... – feeela

回答

0

它是不可能有独立的全球背景。无论发生什么事,全球环境的全球唯一目的就是“全球化”。

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

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

变为:

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

如果你真的必须包装你的包含在一个函数中,看看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(); 
} 
+0

是不是C++风格的命名空间语法错误? – wroniasty

+0

不,它在PHP> = 5.3.0中也有效。 – AdamGold