PHP中“GLOBAL”和“STATIC”变量有什么区别?

时间:2012-04-22 07:26:53

标签: php

PHP中的GLOBAL和STATIC变量到底有什么区别?当我们想在多个函数中使用变量时,哪个更适合使用?

感谢。

4 个答案:

答案 0 :(得分:2)

静态变量只是意味着var属于一个类,但可以在不必实例化所述类的情况下引用它。全局变量存在于全局命名空间中,可以由任何类中的任何函数引用。全球变量总是令人不悦,因为它们很容易被滥用,被覆盖,被意外引用等。至少对于静态变量,你需要通过Class::var;

引用

答案 1 :(得分:2)

Global用于获取可能在其他脚本中定义的全局变量,或者不在同一范围内。

e.g。

<?php

$g_var = 1;

function test() {
   var_dump($GLOBAL['g_var']);

   global $g_var;
   var_dump($g_var);
} 

静态用于定义一个具有整个脚本生命周期的var,而init只用于定义一次。

e.g。

<?php

function test() {
    static $cnt = 0;
    $cnt ++;
    echo $cnt;
} 

$i = 10;

while (-- $i) {
    test();
}

答案 2 :(得分:0)

在创建函数之前先创建全局变量,但在函数中添加了全局关键字

$g_var = 1;

function test() {
  var_dump($GLOBAL['g_var']);
  global $g_var;
  var_dump($g_var);
} 

static已创建并在函数中声明为静态

function test() {
  static $cnt = 0;
  $cnt ++;
  echo $cnt;
}

$i = 10;

while(--$i) test();

答案 3 :(得分:0)

全局变量是在范围中定义的变量,并且可以跨越包含的范围和必需的范围。 (简单来说就是php文件/函数/类

下面是一些有关全局变量如何工作的示例。

示例1:在作用域中声明并使用global关键字在函数中使用的变量

<?php
$a = 1;

function add_a() {
    global $a;
    $a++;
}

add_a();

echo $a;

在上面的示例中,我们声明变量$a并在范围内为其赋值1。然后,我们在相同范围内声明一个函数add_a,并尝试增加$a变量值。调用add_a函数,然后我们echo $a变量期望结果显示2

示例2:在作用域中声明并使用$GLOBALS变量在函数中使用的变量

<?php
$a = 1;

function add_a() {
    $GLOBALS['a']++;
}

add_a();

echo $a;

上面示例2的结果与示例1的结果完全相同。

  

使用global关键字和特殊的PHP定义的$GLOBALS数组变量没有区别。但是,它们都有优点和缺点。

     

在官方PHP网站$GLOBALS上了解有关$GLOBALS的更多信息

如果您要将作用域声明的变量扩展到包含的或必需的作用域,请参见下面的示例。

示例3: 文件a.php

<?php
global $a;
$a = 1;

require 'b.php';

add_a();

echo $a;

文件b.php

<?php
function add_a() {
    global $a;
    $a++;
}

在上面的示例中,我们有文件a.phpb.php。文件b.php中需要文件a.php,因为我们使用了文件b.php中声明的函数。要在文件$a中使用b.php变量,我们必须首先将$a声明为全局变量,以便在本地范围之外使用,我们首先调用global $a,然后定义像$a = 1这样的值。变量$ a现在可通过在处理之前先调用global $a来在任何包含的范围中的任何地方使用。

静态变量 通常在类中找到,但是在一些开发良好的PHP项目中,您可以在递归函数中找到它们。静态变量是记住其值的变量,每次调用该函数或方法时都可以重用。

以下是一些使用中的静态变量的示例。

示例1:函数中的静态变量

function add() {
    static $a = 1;
    $a++;

    echo $a;
}

add(); //2
add(); //3
add(); //4

示例2:类中的静态变量

class A {
    public static $a = 1;

    public static function add() {
        self::$a++;
        echo self::$a;
    }
}

echo A::$a; //1
A::add(); //2

echo A::$a; //2
A::add(); //3

echo A::$a; //3
A::add(); //4
  

请注意,您不能将函数的返回值分配给静态变量。例如,您不能执行static $a = rand()。有关如何将返回值分配给静态变量的信息,请参见下面的示例3。

示例3:将函数的返回变量分配给静态变量

function add() {
    static $a;
    $a = rand();

    echo $a;
}
  

在PHP官方网站Variable scope

上了解有关全局变量和静态变量的更多信息。