在PHP中作用域严格来说分为两种:但是PHP内部还定义一些在严格意义之外的一种,所以总共算三种:
1、 全局变量:就是用户普通定义的变量(函数外部定义)
所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可方法
脚本周期:直到脚本运行结束(最后一行代码执行完)
2、 局部变量:就是在函数内部定义的变量
所属当前函数空间:在PHP中只允许在当前函数自己内部使用
函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)
3、 超全局变量:系统定义的变量(预定义变量:
S
E
R
V
E
R
、
_SERVER、
SERVER、_POST等)
所属超全局空间:没有访问限制(函数内外都可以访问)
超全局变量会将全局变量自动纳入到
G
L
O
B
A
L
S
里
面
,
而
GLOBALS里面,而
GLOBALS里面,而GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量:但是必须使用数组方式
如果想函数内部使用外部变量:除了$GLOBALS之外,通过参数传值(如果要统一战线还可以使用引用传值)。
在PHP中,其实还有一种方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字
Global关键字:是一种在函数里面定义变量的一种方式
1、 如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量);
2、 如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量
本质的形式:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。
基本语法:
Global 变量名; //不能赋值
变量名 = 值; //修改
虽然以上方式可以实现局部与全局的互访,但是通常不会这么用。一般如果会存在特殊使用,也会使用参数的形式来访问。(还可以使用常量:define定义的)
静态变量
静态变量:static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。
基本语法:
Function 函数名(){
//定义变量
Static $变量名 = 值; //通常会在定义的时候就直接赋值
}
静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)
静态变量的使用(思考):
1、 为了统计:当前函数被调用的次数(有没有替代方法?)
2、 为了统筹函数多次调用得到的不同结果(递归思想)
代码就不放了,自己敲