外部变量是一种全局变量吗?

时间:2011-06-05 02:09:44

标签: php variables global-variables global

<?php

$foo = 1;

function meh(){
  // <-- $foo can't be accessed
}

它看起来不像是全局的,但变量在外面的事实是否有像全局那样的缺点?

6 个答案:

答案 0 :(得分:7)

是。可以从任何位置访问它们,包括其他脚本。它们略微更好,因为您必须使用global关键字从函数中访问它们,这样可以更清楚地了解它们来自何处以及它们的作用。

The disadvantages of global variables apply, 但这并不会立即使它们像某些OO语言中常见的那样邪恶。如果他们能够提供一个有效且易于理解的好解决方案,那么你就没事了。实际上有数百万个成功的PHP项目使用这样声明的全局变量。你可以做的最大的错误就是不使用它们,并且当你的代码首先使用它们时,它们会变得更加复杂。 :d

答案 1 :(得分: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'];
    } 
    ?>
    

    http://php.net/manual/en/language.variables.scope.php

  3. 了解详情

答案 2 :(得分:5)

<?php

$foo = 1;

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

?>

答案 3 :(得分:2)

函数外部类似于全局范围(与类C语言相比),但是您必须做一件事来允许访问函数中的var:

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

答案 4 :(得分:2)

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

PHP没有真正的全局变量。您必须使用global $foo;语句手动对其进行别名来访问它们。 (此外,“任何全球性不好”的建议就是这样,不好的建议。)

答案 5 :(得分:2)

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