PHP中比较static , global , GLOBALS

<?php
// 比较global、GLOBALS、static
$k = 0;
function test1() {
	global $k;
	static $i = 0;
	echo 'i:', ++$i, '<br/>';
	echo 'k:', ++$k, '<br/>';
}
test1();
test1();
echo 'i:', $i, '<br/>';
echo 'k:', $k, '<br/>';

echo '------------------<br/>';

function test2() {
	global $k;
	static $i = 0;
	echo 'i:', ++$i, '<br/>';
	echo 'k:', ++$k, '<br/>';
}
test2();
test2();
echo 'i:', $i, '<br/>';
echo 'k:', $k, '<br/>';

$m = 0;
$n = 0;
function test3() {
	global $m;
	echo 'm:', $m++ , '<br/>';
	echo 'n:', $GLOBALS['n']++ , '<br/>';
	unset($m, $GLOBALS['n']);
}
echo '------------------<br/>';
test3();

echo 'm:', $m, '<br/>';
echo 'n:', $n, '<br/>';

echo '------------------<br/>';

static $x = 0;
function test4() {
	echo 'x:', $x++ , '<br/>';
}

test4();


结果如下:

i:1
k:1
i:2
k:2
i:
k:2
------------------
i:1
k:3
i:2
k:4
i:
k:4
------------------
m:0
n:0
m:1
n:
------------------
x:

static 作用域 function class中,相同的function class共用相同的变量
global、GLOBALS 全局作用域
global 会产生一个引用到变量
GLOBALS 直接操作变量
所以unset global变量的时候,全局变量不改变,而GLOBALS直接删除了变量

你可能感兴趣的:(static)