I just read about unset variable through php manual.
The php manual says \"unset() destroys the specified variables\"
This def seems per
Let's consider the function:
function foo() {
static $bar;
$bar++;
unset($bar);
}
foo(); //static $bar is 1
foo(); //static $bar is 2
The function compiles to:
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
A variable actually exists outside each function call to foo() and, on each call, it's fetched and a reference to it is assigned to $bar. In fact, it's very similar to this:
function foo() {
global $bar;
$bar++;
unset($bar);
}
When you call unset(), you're only destroying the reference you created, not the underlying value.
I didn't confirm, but what I'd guess that happens is this:
foo() is called, the symbol $bar is associated with this zval, its reference count is increased to 2 and the reference flag is set.unset is called, the zval has its reference count decreased to 1, the reference flag is probably cleared and the symbol $bar is removed.See reference count basics.