• 静态变量


    静态变量

        在函数体内使用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、函数调用结束:

    图解:

  • 相关阅读:
    游标
    浅析数据准备区中的数据结构
    浅析代理键替换管道
    浅析何时进行概况分析
    浅析Staging
    XHTML教程——表单
    XHTML教程——文字格式与特殊字符
    XHTML教程——列表
    XHTML教程——标签
    CSS入门教程——CSS简介
  • 原文地址:https://www.cnblogs.com/nyxd/p/5356061.html
Copyright © 2020-2023  润新知