码迷,mamicode.com
首页 > 其他好文 > 详细

静态变量

时间:2016-04-05 19:35:32      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

静态变量

????在函数体内使用static定义的变量

语法:

????static $vName =值;

说明:

  • 静态变量在函数调用时只会被初始化一次。
  • 静态变量不会随函数调用与结束,而消失,但是在函数外部无访问。
  • 每次在函数调用时,仍然保留着上次函数运行时的值,而且可以使用
  • 静态变量的值只能是简单的值,不能是一个式子
  • 当我们想在函数多次调用时,每次还有使用上一次函数调用时候的值,那么可以考虑使用静态变量。

静态变量的内存原理

源代码:

<?php

????function funTest(){

????????static $v1 = 100;

????????$v2 = 100;

????????$v1 ++;

????????$v2 ++;

????????echo "<font color=‘red‘>".$v1.‘</font><br/>‘;

????????echo $v2.‘<hr/>‘;

????}

????funTest();

????funTest();

?>

原理描述:

1、编译,加载源代码,词法检查,语法检查(可执行机器代码)

1.1、在编译时发现函数内用static关键字,那就会在静态区开辟一个空间用于存储数据100

2、执行函数调用

2.1、检查是否有形参存在(没有),

2.2、在栈区开辟一个空间用于存储函数的执行(为函数开辟的专属的空间)

2.3、在栈区开辟一个空间用于存储$v1,由于是staitc声明的,把会在静态区存储100数据的物理地址,传递栈区$v1

3、$v2 = 100;

3.1、会在栈区专属于函数空间内开辟一个空间存储$v2,

3.2、在全局区开辟一个空间用于存储100数据,

3.3、将全局区存储100数据的物理地址赋值给$v2。

4、执行$v1++

4.1、根据栈区中$v1的内存地,找到静态区中的内存空间,并将数据加1

5、执行$v2++

5.1、根据栈区中$v1的内存地,找到静态区中的内存空间,并将数据加1

6、执行echo $v1与echo $v2

7、函数调用结束:

8、第二次调用

8.1、static $v1 = 100在编译时已被执行,在函数调用时不会再执行初始化,但仍然在函数专的内存区域,开辟空间存储$v1

8.2、将静态区中的101的物理地址,传递栈区中的$v1

9、执行$v2 = 100,(步骤如:3.1 3.2 3.3)

10、执行$v1++

10.1、根据栈区中$v1的内存地,找到静态区中的内存空间,并将数据加1

11、执行$v2++

11.1、根据栈区中$v1的内存地,找到静态区中的内存空间,并将数据加1

12、执行echo $v1与echo $v2

13、函数调用结束:

图解:

技术分享

静态变量

标签:

原文地址:http://www.cnblogs.com/nyxd/p/5356061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!