扫码关注官方订阅号
84669人学习
65727人学习
82984人学习
467778人学习
498837人学习
471966人学习
256484人学习
152542人学习
224170人学习
139536人学习
81804人学习
85022人学习
11944人学习
20001人学习
60816人学习
5487人学习
15007人学习
2150人学习
6980人学习
194925人学习
359900人学习
1142人学习
19058人学习
3206人学习
180550人学习
48569人学习
17603人学习
40936人学习
1049人学习
750人学习
32909人学习
简单来说有3种作用域:
局部作用域 全局作用域 超全局作用域
对应有3种变量:局部变量 全局变量 超全局变量
局部作用域和局部变量
就是函数内部的作用域范围,其中的定义的变量就是局部变量(包括形参也是局部变量)。
局部变量只能在其函数内部访问。
局部变量在函数调用结束时,会被自动销毁(可以理解为函数执行结束,该执行空间也被销毁了)。
由此可见,函数外部不能访问内部的局部变量。
静态变量:一个特殊的局部变量
含义:
在函数内部,使用static关键字修饰的变量。
形式:
function XXX( .... ){
static $s1 = 10; //此时,$s1就是静态变量
......
}
静态变量的特点:
静态局部变量的值不会在函数调用结束时被销毁,而是会一直保留。
对比:非静态的局部变量在函数调用结束时就会被销毁!
也就是说,当再次调用函数时,该变量(的值)还能继续使用。
全局作用域与全局变量
就是函数外部范围的作用域,其中定义的变量就是全局变量。
全局变量只能在其所在的全局作用域中可以直接使用(访问)。
超全局作用域与超全局变量
包括局部作用域和全局作用域的整个作用域范围。
超全局变量可以在所有范围中使用(访问)。
实际上,只有有限的10来个系统预定义变量是超全局变量,包括:$_GET, $_POST, $_REQUEST等。
所以,系统预定义变量,也被统称为超全局变量。
一个特别的超全局变量:$GLOBALS
它也是一个数组,其中存储了我们自己定义的所有全局变量。
每个全局变量的变量名,就是$GLOBALS数组的一个单元。
比如:
在全局作用域中定义如下变量:
$v1 = 1; //这一行执行,就有了一个这个:$GLOBALS[‘v1’], 其值为1
$v2 = ‘abc’; //这一行执行,就有了一个这个:$GLOBALS[‘v2’], 其值为’abc’
$v3 = true; //这一行执行,就有了一个这个:$GLOBALS[‘v3’], 其值为true
作用:
可以让我们在局部作用域范围中,使用全局变量。
演示如下:
$v1 = 10; //全局变量
function func1( ){
echo $GLOBALS[‘v1’]; //输出10;
echo $v1; //报错:变量v1未定义
$s1 = $GLOBALS[‘v1’] * 5; //结果为50;
$s2 = $v1 * 5; //报错:变量v1未定义
一个特别的的关键字:global
用于在局部作用域中,修饰一个跟全局变量同名的局部变量。
此时该局部变量也可以使用全局变量的值了——实际上他们其实是类似变量引用关系。
其作用类似:$GLOBALS
$a = 10; function sum(){ global $a ; //全局变量的引用的别名 $a++; $b = $a + 1; echo $b; } sum(); // 12 echo $a ; // 11
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
精品班
技术支持
技术咨询
学习群
会员优惠
返回顶部