php语言有三种变量的赋值方式,传值赋值,引用赋值,计数赋值。
传值赋值:
php变量其实就是一个地址的别名而已,如同$a就是一个内存中的地址的别名,比如是0x000011,$b就是另一个地址,$a = $b就是把0x000011地址内存里的数据取出来放到$b所指向的地址中,当unset一个变量以后,就会把这个变量名和地址之间的联系断掉,此时操作系统就会执行垃圾回收,把这个地址的数据清理掉。
引用赋值:
php的引用赋值就是把另一个变量和当前的变量指向同一个地址,当修改两个变量中的任何一个数值的时候都会造成两个数据的变化。
计数赋值:
和Javascript一样,对象都是采用计数赋值的,当$a = new object()以后,就会在栈上开一个变量$a,此时的$a的值是一个地址,指向堆上的一块内存,这块内存上边是这个对象的一个实例,当$b = $a以后就会使得$b中的值也是堆得内存的地址。此时如果你unset掉$a以后,只是把栈上的$a清理掉而已,堆上的内存依然存在,只有你把$b也unset掉,才会使得$a和$b都没办法指向到这个对象,此时这个对象就没有办法得到,在c语言里这个叫做内存泄露,在Java和C#里都有自动垃圾回收机制,这个泄露的内存都会被自动回收,php也是一样,也会在没有变量指向这个堆上的内存以后就会被自动回收掉。
这三种赋值方式分别在什么场合下出现呢?
传值赋值一般在普通的原子变量以及数组时候就是传值赋值,引用赋值在你加上&作用符的时候就会生效,计数赋值在php中在资源文件和对象中存在。
发表这篇博客是希望大家对程序的底层有点了解,这样子才对计算机有更深的了解,写出更高效的网站以及软件。