PHP的静/动态——全/局变量
本文介绍PHP的各种变量,全局静态变量、全局变量、局部静态变量、局部变量
全局变量/局部变量
也即是全局动态变量/局部动态变量
=全局普通变量/局部普通变量
=外部变量/内部变量
实际上,全局变量(也即全局动态变量/全局普通变量)本身就是静态存储方式,所以全局静态变量也是静态存储方式。全局变量和静态变量都是存储在同一个地方。于是所有全局变量也是静态变量。
静态变量不可以赋表达式,只可以赋常量或者常量表达式,如果定义时没有初始化,系统会自动初始化为0(int)或者’’(空string)。也即可以定义时不进行初始化。
普通变量一定要初始化,如果不进行初始化,那么在定义时它的值是不确定的
全局变量/全局动态变量
非全局静态变量(全局动态变量)的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
全局静态变量
全局静态变量则限制了其作用域,只在定义该变量的源文件内有效,在同一源程序(一个源程序由多个源文件组成)的其它源文件中不能使用它。要定义/声明全局静态变量(外部静态变量)可以在前面加上static
关键字
局部变量/局部动态变量
凡是局部变量(无论是普通变量还是静态变量)的作用域都是局限与某个小区域内(如函数),普通变量在每次函数调用完后,存储的内容都会消失(实际上不一定,这涉及到php的底层内核原理)
局部静态变量
局部静态变量的作用域也是局限与某个小区域(如函数),不同的只是函数每次调用结束后,变量的值不会丢失而是依然存在,在下次函数被调用时,该可以从该静态变量获取之前的值。
总结
把局部变量改变为局部静态变量后是改变了它的存储方式,即改变了它的生存期
。
把全局变量改变为全局静态变量后是改变了它的作用域
,限制了它的使用范围。static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在栈中分配,所以不会导致栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与栈变量和堆变量的区别。
代码演示
1 |
|