原 PHP变量被重写会释放内存吗?
一个向往前端的后端工程师 1.2k PHP变量被重写会释放内存吗 php 我知道unset($a)是会释放内存空间(PS:排除被引用情况) 那么如果我在一...
一个向往前端的后端工程师
- 1.2k
PHP变量被重写会释放内存吗
php
我知道unset($a)
是会释放内存空间(PS:排除被引用情况)
那么如果我在一个循环中使用了一个比如$key
这个变量那么当第二次
循环的时候$key
会变成1,那么这时候感觉是$key
被重写了。所以这个时候不显式的使用unset的话,上一个$key还存在吗?
阅读 2.9k
赞
2016-05-19 提问
5 个回答
有明
大部分回答并不尽如人意,大家貌似都把PHP当成编译性语言来解读了。不过结果恰恰相反,PHP是脚本语言,其特性和编译性语言是有差别的。
简单说说,PHP的变量依赖于一个内部实现symbol_table
符号表,而符号表的基础实现是HashTable
,也就是和PHP数组的基础实现是一致的。真是因为符号表的存在,让我们可以使用global
标记全局变量,用如compact
等函数直接从当前符号表中拉出变量出来。那在谈谈题主说的unset($a)
会不会马上释放空间,答案是否定的,unset
支持从符号表中把名字为a
的这个元素删掉了(只是标记这块空间又可用了,而不是释放空间)。再说循环中重复更新$key
这种情况,因为更新的是相同名字的变量,所以在符号表中他们是同一个元素,更新时就会更新相同的位置,之前元素的值就马上被覆盖了。
...
浏览更多内容请先登录。
立即注册
分享的网址网站均收集自搜索引擎以及互联网,非查问网运营,查问网并没有提供其服务,请勿利用其做侵权以及违规行为。
更新于:2020-03-29 21:42:32
相关内容
推荐内容