静态变量|学习笔记

简介: 快速学习静态变量

开发者学堂课程【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

运行结果:

image.png

因为当函数第一次调用的时候把这段代码用来执行,$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 修饰的变量,如果没有就一行行往下执行。如果有就跳过。再往下执行会发现如果有操作静态变量,意味着前面操作的都会保存到函数里面,第二次操作的又存在函数里面,调用完后整个的都会销毁,最后静态变量能在函数第一次调用的时候,把数据存着,第二次可用,第二次调用的时候把数据存着第三次的时候可用。

image.png


四、小结

1、静态变量是在函数内部定义的使用 static 修饰的局部变量。

(1)static 修饰的变量是在函数编译(加载)时被初始化

(2)static 修饰的变量行在函数调用时会跳过执行

(3)静态变量是保存在函数里面:所以每次调用时修改的值都可以被下次调用使用

2、静态变量的作用

(1)让函数在多次调用时能够共享内部数据变化

(2)普通局部变量每次调用都会初始化

3、静态变量的使用场景

(1)数据需要函数多次调用共享数据

(2)在函数使用递归存储数据的时候

相关文章
|
2天前
局部变量和成员变量
局部变量和成员变量 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。 3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值
9 3
|
9月前
|
Java
成员变量与局部变量
成员变量与局部变量
79 0
|
11月前
|
存储 C#
C#再学习之静态变量
这次机房合作用C#完成,所以,要对C#的语法知识进行再学习,这时候真的体现了滚动学习的重要性!这次的内容是:学习静态变量。
|
2月前
|
存储 SQL 分布式计算
使用Amazon EMR和Apache Hudi在S3上插入,更新,删除数据
使用Amazon EMR和Apache Hudi在S3上插入,更新,删除数据
120 0
|
12月前
|
存储
局部变量和成员变量的4个区别
定义位置不同、内存中的位置不同、周期不同、初始化不同。
100 0
|
Java
Java中 类变量(static静态变量)和实例变量(非静态变量)的区别
Java中 类变量(static静态变量)和实例变量(非静态变量)的区别
233 0
|
PHP 开发者
局部变量|学习笔记
快速学习局部变量
75 0
局部变量|学习笔记
|
存储 Java
JavaSE面试题——成员变量(类变量 & 实例变量) & 局部变量
JavaSE面试题——成员变量(类变量 & 实例变量) & 局部变量
JavaSE面试题——成员变量(类变量 & 实例变量) & 局部变量
|
机器学习/深度学习 传感器 算法
【图像识别】基于CNN 实现水果分类附matlab代码
【图像识别】基于CNN 实现水果分类附matlab代码
|
存储 编解码 芯片
单片机:ADC模数转换实验(内含ADC介绍+XPT2046芯片介绍+硬件电路设计+软件编程设计+原始代码)
单片机:ADC模数转换实验(内含ADC介绍+XPT2046芯片介绍+硬件电路设计+软件编程设计+原始代码)
590 0
单片机:ADC模数转换实验(内含ADC介绍+XPT2046芯片介绍+硬件电路设计+软件编程设计+原始代码)