php符号表
关于符号表,有一些疑问
1、这么理解对不对
(1)符号表是key-value结构,就跟数据库一样。每新建一个变量,就在符号表添加一条记录。
(2)当$a=1时,在符号表添加一条数据,key为a,value为指向内存的地址,假设是0x111222。当$b=$a时,b对应的value值也为0x111222。
2、当$c = & $a 时,会强制进行分离。有些强迫症的问题来了,是谁分离出去?也就是0x111222这个地址是$b的,还是$a/$c的?
3、关于unset($a),网上资料都说是断开指向,怎么断开的?是不是其实就是把符号表中的$a记录删除了?
------解决思路----------------------
$a = 12;
$b = $a;
$c = &$a;
echo $b."_".$c; //12_12
$a = 15;
echo $b."_".$c;//12_15
?>
&为引用变量 or 函数地址等,这个&跟C语言的指针有相似之处,$b=$a;只是把变量a的值赋值给变量b,当变量a发生变化时,变量b不会跟着变化
------解决思路----------------------
感觉这样理解吧:
$b=$a 只是会把a对应的值赋给b,并不会将地址也给b;
$c=&$a 是引用赋值,会将a的地址分离出去给c,也就是说a是啥c就是啥
unset($a), 断开连接,其实就是将$a指向的地址断开,比如你说的0x111222,只是会将这个指向连接断开,但这个地址中的值仍然存在。。。。。。。
可能表达不太清楚
希望能帮到你吧
------解决思路----------------------
1.你的理解算是正确
2.$c = & $a 是会复制一个$b $c 、 $a指向0x111222
3.unset($a) 只是把$a从symbol_table删除 并把$a的zval --recount 如果 recount==0 则gc