直接用例子说话:
例一:
function fun1(){
$a=100;
echo $a;
}
function fun2(){
$b=200;
echo $b;
}
fun1(); //输出的结果为100
fun2(); //输出的结果为200
例二:
function fun1(){
$a=100;
}
function fun2(){
$b=200;
}
fun1();
fun2();
echo $a;
echo $b;//输出的结果是得不到任何的值
对例一和例二进行比较可知:
调用函数的时候将变量$a,$b的值存入到内存中,调用结束后将变量$a,$b的值从内存中释放掉。
在函数内声明的变量只能在函数中使用。//局部变量
$a=100;
function fun1(){
echo $a;
}
function fun2(){
echo $a;
}
fun1();
fun2();//得不到任何的值。
系统不能区分开$a有什么不同。函数外部声明了$a,在函数内部的$a看做是新声明的变量,所以无法输出。要区分开的话需要加一个关键字global。
$a=100;
function fun1(){
global $a;
echo $a;
}
function fun2(){
global $a;
echo $a;
}
fun1();//得到的值为100
fun2();//得到的值为100。全局变量
$a=100;
$b=300;
function fun1(){
echo $GLOBALS["a"];//得到的结果为100
echo $GLOBALS["b"];//得到的值为300
}
function fun2()
{
global $a;
global $b;
echo $a;
}
fun1();
fun2();
$a=100;
$b=300;
function fun1(){
global $a;
$a=999;
}
function fun2()
{
global $b;
$b=111;
}
fun1();
fun2();
echo $a."<br>";//得到999
echo $b."<br>";//得到111
$a=100;
$b=300;
function fun1($a){
global $a;
$a=999;
}
function fun2($b){
global $b;
$b=111;
}
fun1($a);//得不到任何值
fun2($b);//得不到任何值
echo $a."<br>";//得到999
echo $b."<br>";//得到111
$a=100;
function fun1($a)//传值:将全局变量值$a=100传递给函数fun1
{
$a=999; //$a的值变为999
}
fun1($a);//编译函数并释放掉内存中的$a=999
echo $a."<br>";//得到全局变量的值100.
$a=100;
function fun1(&$a)//&代表传地址
{
$a=999;
}
fun1($a);
echo$a."<br>";//得到结果为999
function test(){
$a=0;
echo $a."<br>";
$a++;
}
test();//得到值为0
test();//得到值为0
test();//0
原因:在调用后内存被释放。声明输出释放三步。
function test(){
static $a=0;//静态变量。在所有调用该函数内共享,紧在第一次调用的时候被初始化,后边调用不在执行初始化这一步。
echo $a."<br>";
$a++;
}
test();//可以任意的改变大小写,在php里函数是不区分大小写的,变量区分
function_exists("test");//判断函数是否存在