开发者学堂课程【PHP 基础入门课程(下):静态变量】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/710/detail/12636
静态变量
内容介绍:
一、静态变量概念
二、示例
三、流程图解析
四、小结
一、静态变量概念
1、静态变量:在函数内部定义的,可以在函数多次调用时共用的局部变量。实现数据的跨函数使用。
2、说明如下:
(1)静态变量使用 static 关键字修饰。
(2)静态变量是在函数内部定义的局部变量。
(3)静态变量在函数加载(编译)时初始化(只初始化一次)。
(4)静态变量可以在同一个函数多次调用时共享数据的变化。(静态变量是存储在函数里面的)
3、步骤:
(1)确定函数内的局部变量是否需要在函数多次调用时共享
不需要:普通局部变量即可
需要:使用 static 修饰成静态变量
(2)在函数内部对静态变量进行运算
二、示例
当函数被调用时输出函数是第几次调用。(如果用一个变量来记,当跨脚本或同时运行多个脚本时就不方便了,所以用内部来记)
function display(){
#普通局部变量:每次调用函数都会执行初始化
$count1 = 1;
#静态变量:函数加载时初始化被执行(调用时不执行)
static $count2 = 1;
#参与其他运行的代码都是在调用时执行
echo $count1++,$count2++;
}
display();
#输出1,1
display();
#输出1,2
<?php
function display(){
#记录函数被调用了多少次
$count1 = 0;
echo ++$count1,‘<br/>’;
}
display();
#调用了一次
display();
#还是1
运行结果:
因为当函数第一次调用的时候把这段代码用来执行,$count1 = 0
,再加$count1 = 1
,然后输出,输出完了后要销毁局部变量。当第一次调用完了执行第二次的时候前面都已经没了,再来一次会初始化,因此每次都是1。但可以
function display(){
#记录函数被调用了多少次
$count1 = 0;
#静态变量
static $count2=0;
#可以声明可以赋值 该行代码只会在函数加载到内存的时候执行:以后函数调用时系统会跳过
cho $count1++,$count2++,‘<br/>’;
}
display();
#输出1,1
display();
#输出1,2
函数在编译的时候代码检测到 static, 会对它进行初始化,函数自己保存变量等于0,而且该行代码只会在函数加载到内存的时候执行:以后函数调用时系统会跳过。
三、流程图解析
第一步函数要加载到内存,加载到内存就是要进行编译,此时系统要判定其中是否有静态变量,如果没有,直接加载到内存。如果有,系统会初始化静态变量。此时值保存在结构里面。接下来到内存之后,访问函数,判断是否有 C 修饰的变量,如果没有就一行行往下执行。如果有就跳过。再往下执行会发现如果有操作静态变量,意味着前面操作的都会保存到函数里面,第二次操作的又存在函数里面,调用完后整个的都会销毁,最后静态变量能在函数第一次调用的时候,把数据存着,第二次可用,第二次调用的时候把数据存着第三次的时候可用。
四、小结
1、静态变量是在函数内部定义的使用 static 修饰的局部变量。
(1)static 修饰的变量是在函数编译(加载)时被初始化
(2)static 修饰的变量行在函数调用时会跳过执行
(3)静态变量是保存在函数里面:所以每次调用时修改的值都可以被下次调用使用
2、静态变量的作用
(1)让函数在多次调用时能够共享内部数据变化
(2)普通局部变量每次调用都会初始化
3、静态变量的使用场景
(1)数据需要函数多次调用共享数据
(2)在函数使用递归存储数据的时候