PHP中的GLOBAL和STATIC变量到底有什么区别?当我们想在多个函数中使用变量时,哪个更适合使用?
感谢。
答案 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.php
和b.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
上了解有关全局变量和静态变量的更多信息。