变量都有其自己的作用范围,超出了范围就不再有效。
PHP中的变量有3种作用范围:局部变量,全局变量,和静态变量
局部变量
在函数内部定义的变量就是局部变量,局部变量的作用域就是这个函数。如果在函数外部对局部变量进行复制,是无效的,因为那是对另一个变量的赋值。
全局变量
定义在所有函数以外的变量,就是全局变量。全局变量的作用域是整个PHP文件。但是它的作用域达不到函数内部。
如果想让一个在函数体内部的变量成为全局变量,就要在前面加global关键字。只有加入了global关键字,才可以在函数外部对它的值进行操作。
静态变量
一般来说,在函数被调用结束后,函数体内部的变量都会被内存清除。如果想让函数体内的变量在被调用完之后仍然存在,就需要使用static关键字来声明。
下面这个例子说明的是局部变量和全局变量的使用:
<?php
$e1 = "outside the function"; //全局变量$e1
function example(){ //函数example
$e1 = "inside the function"; //局部变量$e1
echo $e1; //函数内的输出语句,输出局部变量$e1
}
example(); //调用函数,输出局部变量
echo $e1; //输出全局变量
?>
可见,尽管名字相同,由于声明的位置不一样,变量的作用域是不同的,它们是不同的变量。
下面这个例子说明的是静态变量与非静态变量的区别:
<?php
function testStatic(){ //第1个函数
static $i = 0; //声明为静态变量
$i += 1; //自加1
echo $i; //输出$i的值
}
function nonStatic(){ //第2个函数
$i = 0; //非静态,普通局部变量
$i += 1; //自加1
echo $i; //输出$i的值
}
for($j=0;$j<10;$j++) //循环10次输出
testStatic(); //调用第1个函数
echo '<br>';
for($j=0;$j<10;$j++) //循环10次输出
nonStatic(); //调用第2个函数
?>
执行这个PHP文件,可以发现,第1个循环输出的是1到10这10个数字;第2个循环输出的是10个1。
区别在哪里呢? 就在于$i 是否被声明为static类型。一旦被声明为static类型的变量,调用结束后,其值仍然保留。第二次调用的时候,函数中的初始化的语句就不会被执行了,而是继续以现存的数值参与语句的执行,这样,其输出的值就跟非静态变量不同了。