脚本宝典收集整理的这篇文章主要介绍了在PHP中unset变量,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP手册说
“unset()破坏指定的变量”
这个def似乎是完美的,直到我碰到静态变量
“如果静态变量在函数中是unset(),那么unset()只会在函数的其余部分的上下文中销毁该变量,下面的调用将恢复变量的前一个值.
这个定义似乎对我来说似乎不错,至少,因为“破坏变量”意味着该变量不再与该内存位置相关联.
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变量所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。