Home  >  Article  >  Backend Development  >  php符号表,该如何处理

php符号表,该如何处理

WBOY
WBOYOriginal
2016-06-13 12:08:142459browse

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn