繁体   English   中英

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

[英]What is the difference between “GLOBAL” and “STATIC” variable in PHP?

PHP中的GLOBAL和STATIC变量之间到底有什么区别? 当我们想在多个函数中使用变量时,最好使用哪一个?

谢谢。

静态变量仅表示var属于一个类,但无需实例化该类即可引用该变量。 全局变量位于全局名称空间中,并且可以由任何类中的任何函数引用。 全局var总是被皱着眉头,因为它们很容易被滥用,覆盖,意外引用等。至少对于静态var,您需要通过Class::var;进行引用Class::var;

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

例如

<?php

$g_var = 1;

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

   global $g_var;
   var_dump($g_var);
} 

静态用于定义一个具有完整脚本寿命的var,并且只能初始化一次。

例如

<?php

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

$i = 10;

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

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

$g_var = 1;

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

创建static并在函数中声明static

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

$i = 10;

while(--$i) test();

全局变量是在范围中定义的变量,可以跨到包含范围和必需范围。 简单来说,我指的是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 要在文件b.php使用$a变量,我们必须首先将$a声明为global以便在本地范围之外使用,我们首先调用global $a ,然后定义一个类似于$a = 1 变量$ a现在可以在任何包含的作用域中的任何位置使用,方法global $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官方网站变量范围

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM