让我们考虑一下功能:

function foo() {

static $bar;

$bar++;

unset($bar);

}

foo(); //static $bar is 1

foo(); //static $bar is 2

该函数编译为:

function name: foo

number of ops: 11

compiled vars: !0 = $bar

line # * op fetch ext return operands

---------------------------------------------------------------------------------

2 0 > EXT_NOP

4 1 EXT_STMT

2 FETCH_W static $0 'bar'

3 ASSIGN_REF !0, $0

5 4 EXT_STMT

5 POST_INC ~1 !0

6 FREE ~1

6 7 EXT_STMT

8 UNSET_VAR !0

7 9 EXT_STMT

10 > RETURN null

每个函数调用foo()之前实际存在一个变量,每次调用时,都会获取一个变量,并将其引用分配给$bar.其实这和以前非常相似:

function foo() {

global $bar;

$bar++;

unset($bar);

}

当您调用unset()时,您只会破坏您创建的引用,而不是基础值.

我没有确认,但我猜这是发生的是这样的:

>存储变量(zval)的底层表示,使其引用计数为1.

>当调用foo()时,符号$bar与此zval关联,其引用计数增加到2,并设置引用标志.

>当未设置被调用时,zval的引用计数减少到1,引用标志可能被清除,符号$bar被删除.

php 变量 unset,在PHP中unset变量相关推荐

  1. js delete删除对象属性,delete删除不了变量及原型链中的变量

    js delete删除对象属性,delete删除不了变量及原型链中的变量 一.delete删除对象属性 function fun(){this.name = 'gg';}var obj = new f ...

  2. python变量的作用_Python中的变量

    Python中的变量是用来表示一个值的标识符.变量代表了计算机内存中的一个地址.变量允许在程序中访问其他对象,调用函数或执行其他运算. 1.变量命名规则 变量是Python中的标识符,它应该遵循标识符 ...

  3. python中的变量的引用_python中的变量引用小结

    python的变量都可以看成是内存中某个对象的引用.(变量指向该内存地址存储的值) 1.python中的可更改对象和不可更改对象 python中的对象可以分为可更改(mutable)对象与不可更改(i ...

  4. 使用变量_在 Linux 中使用变量 | Linux 中国

    让我们来看看所有这些 $ 值可以告诉你什么.-- Sandra Henry-stocker 变量通常看起来像 $var 这样,但它们也有 $1.$*.$? 和 $$ 这种形式.让我们来看看所有这些 $ ...

  5. java中为什么需要常量和变量的区别_Java中的变量和常量

    1.变量(variable) 变量,顾名思义,就是变化的量. 我们可以通过变量来操作存储空间中的数据,变量就是指代这个存储空间,一旦你定义了一个一个变量,那么空间的位置就确定了,虽然空间位置是确定的, ...

  6. python变量类型函数_python中的变量和数据类型

    一.变量定义:变量是计算机内存中的一块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字. 二.变量命名规则: 1. 变量名由字母.数字.下划线组成 2. 数字不能开头 3. 不可 ...

  7. Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量

    spring 中可以在import 的filename中使用变量 <import resource="camel-context-routes.${username}xml" ...

  8. python保存变量_将python 中的变量保存到本地

    如何将python中的变量保存在本地? 将python 的一些代码保存在本地, 特别是一些需要大量运算的结果,例如 机器学习里面的模型,,放在本地,还是比较好用的.下次就可以直接拿出来使用就好. 其实 ...

  9. java 继承变量_用java中的变量继承

    任何人都可以澄清我.这里实例方法被覆盖但变量不被覆盖. 输出为:B 10 class A{ int i=10; public void name(){ System.out.println(" ...

  10. matlab中怎么查看变量,Matlab 查看内存中的变量,清空屏幕等命令

    Matlab 查看内存中的变量,清空屏幕等命令 该文章讲述了Matlab 查看内存中的变量,清空屏幕等命令. 1. 查看内存中的变量 who whos 2. clc 清空屏幕 3. clf 清空当前的 ...

最新文章

  1. PAT甲级1028 List Sorting:[C++题解]排序,cin和cout会超时
  2. 第一章:递推与递归 【完结】
  3. 深度学习pytorch--MNIST数据集
  4. 前端学习(1427):ajax封装二
  5. linux认令牌操作错误,验证令牌操作错误
  6. 垃圾回收算法的实现原理_有关垃圾回收算法工作原理的动画指南
  7. 《Go 语言程序设计》读书笔记(十)反射
  8. 【Elasticsearch】Elasticsearch ICU现在可以理解表情符号了!
  9. mobile webiste 中的css的font-size em及line-height等换算
  10. sqoop job入门 与sqoop增量导入
  11. 利用PyInstaller打包exe文件
  12. 最小二乘法用计算机求经验回归方程,最小二乘法求线性回归方程.doc
  13. ASP + SQL Server聊天室设计实例
  14. 高拍仪拍照SDK开发(良田影像S300L|S500L)
  15. 九型人格:三、The proformer 实干者 - 我若没有成就,就没有人会爱我。
  16. python中代码注释使用的符号是_Python语句中用于注释代码的符号是
  17. 深圳服务器托管,影响价格的因素
  18. c语言求定积分的程序,C语言用六种方法求定积分
  19. 剧本翻译之SHUFFLE 6月21日
  20. 高新技术企业认定的申报程序

热门文章

  1. JAVA写接口傻瓜(%)教程(五)
  2. How to deploy Odoo 11 on Ubuntu 18.04
  3. Canu FAQ常见问题
  4. android壁纸路径/目录
  5. [zhuan]asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
  6. 浅谈Java内存模型——JVM
  7. 解决jpa和hibernate的json序列化死循环问题
  8. Spring BeanFactory和FactoryBean的区别
  9. synchronized工作原理剖析(一)
  10. List中根据某个实体的属性去重