php中global和static两个关键字详解,有需要的朋友可参考一下。
1.global在整个页面起作用。
2.static只在function和class内起作用。
global和$GLOBALS使用基本相同,但在实际开发中大不相同。
global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,一但改变了别名变量的指向地址,就会发生一些意料不到情况,例如例子1.
$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致!
实例
代码如下 |
复制代码 |
// 比较global、GLOBALS、static
$k = 0;
function test1() {
global $k;
static $i = 0;
echo 'i:', $i, ' ';
echo 'k:', $k, ' ';
}
test1();
test1();
echo 'i:', $i, ' ';
echo 'k:', $k, ' ';
echo '------------------ ';
function test2() {
global $k;
static $i = 0;
echo 'i:', $i, ' ';
echo 'k:', $k, ' ';
}
test2();
test2();
echo 'i:', $i, ' ';
echo 'k:', $k, ' ';
$m = 0;
$n = 0;
function test3() {
global $m;
echo 'm:', $m , ' ';
echo 'n:', $GLOBALS['n'] , ' ';
unset($m, $GLOBALS['n']);
}
echo '------------------ ';
test3();
echo 'm:', $m, ' ';
echo 'n:', $n, ' ';
echo '------------------ ';
static $x = 0;
function test4() {
echo 'x:', $x , ' ';
}
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:
|
代码如下
|
复制代码
|
|
// 比较global、GLOBALS、static
$k = 0;<script>ec(2);</script>
function test1() {
global $k;
static $i = 0;
echo 'i:', $i, '
';
echo 'k:', $k, '
';
}
test1();
test1();
echo 'i:', $i, '
';
echo 'k:', $k, '
';
echo '------------------
';
function test2() {
global $k;
static $i = 0;
echo 'i:', $i, '
';
echo 'k:', $k, '
';
}
test2();
test2();
echo 'i:', $i, '
';
echo 'k:', $k, '
';
$m = 0;
$n = 0;
function test3() {
global $m;
echo 'm:', $m , '
';
echo 'n:', $GLOBALS['n'] , '
';
unset($m, $GLOBALS['n']);
}
echo '------------------
';
test3();
echo 'm:', $m, '
';
echo 'n:', $n, '
';
echo '------------------
';
static $x = 0;
function test4() {
echo 'x:', $x , '
';
}
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:
global关键字如果用在function内部,则说明这个function内用的这个变量是全局的,全局变量就是在整个页面里都能起作用
static就是表示静态。所谓的静态,其实是在function或者class内部而言的。function中static的变量,在funciton执行完之后,不会消失,可以在下次执行的时候继续使用