zoukankan      html  css  js  c++  java
  • 理解下PHP静态变量中使用unset

    function test() {
    static $test;
    $test++;
    echo($test . " ");
    unset($test);
    $test = 2;
    echo($test . " ");
    }
    test();
    test();
    test();

    结果:

    1 2 2 2 3 2

    我是这样理解的,首先 static $test 在 test() 函数中定义了一个内存块,变量 $test 则是对该内存块的一个引用,然后 $test++ 后,是对该静态内存块的叠加,后面 unset($test) 之后,仅仅是变量 $test 对之前那块静态内存区域的引用失效了(之前的静态内存块依然存在,但 $test 变量本身已经被毁),再后面,$test = 2,则是新申请了一块内存 以及 一个新的变量 $test。

    关于摧毁引用的那几行代码,有点类似于下面代码:

    $a = 1;
    $b = & $a;
    unset($a);

    结果 $a 被销毁,但输出 $b 结果仍为 1。

    再对比上面的静态变量,道理都一致,由于PHP是引用计数,只要有对该内存块的引用,该内存块就不会被销毁(此亦是容易引起循环引用问题的主要原因)。

  • 相关阅读:
    【面试】Java基础
    GC
    【面试】JVM
    Spooling技术
    数据结构之 平衡二叉树
    二叉树应用
    LINUX设备驱动模型之class
    RTC(x86)
    微内核和单内核
    Linux内核的五大模块
  • 原文地址:https://www.cnblogs.com/ppoo24/p/2341821.html
Copyright © 2011-2022 走看看