2011-06-05 58 views

回答

7

是的。可以从任何位置访问它们,包括其他脚本。他们是略微更好,因为你必须使用global关键字从一个函数内访问它们,这使得它们更加清晰地表明它们来自哪里以及它们的作用。

The disadvantages of global variables apply,但这并不能立即使它们成为邪恶的,正如在某些面向对象语言中经常被察觉的那样。如果他们提供了一个高效且易于理解的好解决方案,那么你很好。实际上有数百万成功的PHP项目使用这样的全局变量声明。你可以做的最大的错误就是没有使用它们,并且如果首先使用它们的话可能会让你的代码变得更加复杂。 :D

4
<?php 

$foo = 1; 

function meh(){ 
    global $foo; 
    // <-- $foo now can be accessed 
} 

?> 
2

功能的外面是八九不离十像全球范围内(相比于C的语言),但你必须做的一件事,让一个函数内访问VAR:

function meh(){ 
    global $foo; 
    // $foo now exists in this scope 
} 
2

在您的示例中$foo在全局范围内被创建为变量。 (除非在另一个函数/方法范围内显示的脚本是included())。

PHP没有真正的全局变量。您必须使用global $foo;语句手动将其别名,才能访问它们。 (也是“什么东西全球都不好”建议就是这样,坏建议。)

2

如果我正确理解你的问题,真的不应该有问题。除非将变量声明为全局变量,否则它将被限制在声明的范围内,在这种情况下,无论上面的代码是在哪个php文件中定义的。您都可以在meh()中声明另一个变量$ foo,它会是独立于外部定义的$ foo。

7

在全局范围内声明在任何函数外部定义的所有变量。如果你想访问一个全局变量,你有两个选择:

  1. 使用全球关键字

    <?php 
    $a = 1; 
    $b = 2; 
    
    function Sum() 
    { 
        global $a, $b; 
    
        $b = $a + $b; 
    } 
    ?> 
    
  2. 或者使用$ GLOBALS

    <?php 
    $a = 1; 
    $b = 2; 
    
    function Sum() 
    { 
        $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; 
    } 
    ?> 
    

    阅读更多at http://php.net/manual/en/language.variables.scope.php