先上图:

解释一下这个图:
(上图由于粗心,出现了错误,其实1000那个值并没有开辟新的堆内存,只是修改的第一个堆内存的值:把10修改成了1000)
首先,当我们声明一个变量时(比如$a = 10;),PHP的工作是:把$a这个名字存放在栈内存中,把它的值存放在堆内存中,它们
之间通过某种机制进行绑定(具体是什么我也不大清楚 --)。
$b = $a; 这个就比较容易理解了:这个时候,PHP的工作是:当我们使用 $a 变量的时候,PHP通过某种机制快速的找到变量相
对应的值,然后把值赋给$b( php把$b存放在栈内存中,把10存放在堆内存中,这个10是通过$a取出来的 )。
$c = &$a; 值引用:两个变量公用一个堆内存。这时候PHP的工作是: 把$a的绑定机制,复制一份给$c(这时候输出$c就是$a
的值,$a变量的值变成什么,$c的值也就是什么,因为他们用的是同一个内存空间).
unset($a);销毁这个变量,注意:PHP销毁的只是栈内存中$a这个变量,与之对应的堆内存中值并没有被销毁。 值是PHP垃圾回收机制
回收的。
简单谈一下PHP垃圾回收机制
PHP运行时,要把所有的代码加载到内存中运行,运行时会检测哪些变量没有被使用,没有被使用的变量(或者unset掉的变量),
与之相对应堆内存中的值会被PHP释放掉,运行结束后,释放所有栈内存和堆内存。
以上内容由博主自己理解并总结的,如有错误,万分感谢各位大佬的指正!