在PHP中unset变量
我刚刚阅读关于unset变量通过php手册.
php手册说 这个def似乎是完美的,直到我碰到静态变量 这个定义似乎对我来说似乎不错,至少,因为“破坏变量”意味着该变量不再与该内存位置相关联. 有其他人认为更好的定义是“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. 见reference count basics. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |