🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
https://www.php.cn/course/25.html(PHP中文网的手册自认为最好用的) # 变量: `PHP中用$来引用变量,比如说声明变量a 那么就是$a ` ## 命名规则与C++一样。 ``` global $变量; 函数中引入全局变量(函数引入函数以外的变量) ``` ``` $GLOBALS['去$付的变量名称']; 函数中引入全局变量(函数引入函数以外的变量) ``` ## 变量检测与删除及全局变量删除技巧 ``` isset(变量名称) 方法 :检测变量有没有 有输出true 没有输出false; unset(变量名称) 方法: 删除变量 ``` # 静态变量 ### static 静态变量 类型说明符是static。 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而 auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中始终存在,但是在它作 用域之外不能使用。 另外,属于静态存储方式的变量不一定就是静态变量。 例如:外部变量(在PHP中指全局变量)虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。 静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。 静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。 **一、静态局部变量:** 1、static类型的内部变量同auto自动变量(即未加 static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,两者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。 2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。 4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用(主要是变量的作用域造问题成的),因此仍以采用局部静态变量为宜。 注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。 **二、静态全局变量** 全局变量(外部变量)的声明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别虽在于: 1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。 ``` static $变量名称 这个方法很好用,类似JS中增量信号方法,一般用在函数里让变量定局而不被重置。 ``` 以下代码输出的值为600 因为$b在循环里多次被重置为0了。 ~~~ $a=100; function xiao(){ for($i=0;$i<=500;$i++) { $b=0; $b=$b+$i; } global $a; $a+=$b; return $a; } echo xiao(); ~~~ 以下代码输出的值为125350 因为$b添加了static在循环里就不会被重置了。 ~~~ $a=100; function xiao(){ for($i=0;$i<=500;$i++) { static $b=0; $b=$b+$i; } global $a; $a+=$b; return $a; } echo xiao(); ~~~ 代码案例2: ~~~ function xiao():int{ static $a=1; return $a++; } echo xiao(); //1 echo xiao(); //2 如果没有static静态变量这里值为1 echo xiao(); //3 如果没有static静态变量这里值为1 ~~~