全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式. 这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 所以呢可以避免在其它源文件中引起错误. 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期.把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围. static函数与普通函数作用域不同.仅在本文件.只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义.对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
局部变量作用域为局部,存储时期为定义后分配内存,退出作用域后释放内存;
全局变量默认为静态变量,局部变量默认为自动变量,也可以声明为静态变量,静态变量和自动变量的区别是存储时期的区别,静态变量的存储时期是内存空间在程序运行期间都存在,程序退出才被释放;自动变量内存空间在作用域内才存在,退出作用域后就被释放.
静态局部变量的特点:
①不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它.倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
代码如下:
function test()
{
$var++;
echo $var . ' ';
}
echo $var; //报错:Notice: Undefined variable: var
关于静态全局变量:
//全局变量本身就是静态存储方式,所有的全局变量都是静态变量
function static_global(){
global $glo;
$glo++;
echo $glo.'br';
static_global(); //1
所以静态全局变量使用并不多.
最大的差别还是在于作用域.
举个例子:
php
function?a($a)
static?$aa;
$aa[]?=?$a;
return?$aa;
a(1);
var_dump($a);
//输出
好了,全部的静态变量的例子;
以上例子的惊天变量 $aa 是无法被外部访问的.
再举一个全局变量的例子:
global?$aa;
var_dump($aa);
这个时候,全局变量 $aa 是能被全局访问的.
以前在远标了解过全局变量与全局静态变量的区别:
(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别.
(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的.
(c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用;
静态全局变量的作用:
(a)不必担心其它源文件使用相同变量名,彼此相互独立.
(b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改.
(c) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;
和静态变量都是保存在全局区的,普通变量保存在栈区,动态分配的内存空间是存在堆区的