PHP 有三种不同的变量作用域:
- local(局部)
- global(全局)
- static(静态)
Local 和 Global 作用域
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
例子:
1. 局部变量,全局变量 普通情况 都需要在相应的环境下才可以。
<?php
$num = 12;
function test(){
$num2 = 1;
$num = 12;
function test(){
$num2 = 1;
echo "num: $num !"."---"; // 报错
echo "num2: $num2 !"."--"; // 1
}
test();
echo "<br/>";
test();
echo "<br/>";
echo "num: $num !"; // 12
echo "num2: $num2 !"."--"; // 报错
?>
全局,局部的变量只有在相应的范围内才能输出。
即便是全局变量,局部范围 还是 找不到这个值。
2. 全局变量 -- 局部输出: global, $GLOBALS['']
<?php
$x = 5;
$y = 10;
function func(){
$x = 5;
$y = 10;
function func(){
global $x,$y,$z;
$z = $x+$y;
}
func();
echo $z; // 15
}
func();
echo $z; // 15
?>
--------------------------------------------------------------
<?php
$a = 23;
$b = 10;
function abc(){
$GLOBALS['c'] = $GLOBALS['a'] + $GLOBALS['b'];
}
abc();
echo $c; // 33
?>
$a = 23;
$b = 10;
function abc(){
$GLOBALS['c'] = $GLOBALS['a'] + $GLOBALS['b'];
}
abc();
echo $c; // 33
?>
3.static 保存局部变量. 一般局部变量使用完就会被删除,下次再重新定义赋值。
<?php
function jubu(){
static $a = 1;
$aa = 10;
echo $a++.' --- ';
echo $aa++.' / ';
}
jubu(); // 1 10
jubu(); // 2 10
jubu(); // 3 10
jubu(); // 4 10
jubu(); // 5 10
function jubu(){
static $a = 1;
$aa = 10;
echo $a++.' --- ';
echo $aa++.' / ';
}
jubu(); // 1 10
jubu(); // 2 10
jubu(); // 3 10
jubu(); // 4 10
jubu(); // 5 10
?>