Rumah >pembangunan bahagian belakang >tutorial php >php中的可变变量和引用赋值有什么区别?

php中的可变变量和引用赋值有什么区别?

怪我咯
怪我咯asal
2017-06-20 09:56:411245semak imbas

从PHP内核的角度跟你解释下吧,你可以深入理解下,就完全明白了;
PHP的变量在内核中都是通过C语言的结构zval来存储的(你没学过C,你可以理解为是个对象,里面的成员变量都是类的属性,暂时先这样理解),zval结构如下:

struct _zval_struct {
zvalue_value value; // 存储变量的值
zend_uint refcountgc; //表示引用计数 默认为:1
zend_uchar type; // 变量具体的类型
zend_uchar is_refgc; //表示是否为引用
};

举个例子,php代码如下:

$a = 10;
$b = $a;

这时$b没有引用,只是将$a的值赋给了$b,那么zval这个结构中的refcountgc就变为2了,而is_refgc还是false,表示未引用,因为内核$a已经开辟了一块内存空间,当$a赋值给$b时,$b的值只指向了$a,这样就省去了重新开辟一块内存,但是当$b值被改变时($a的值不会变),$b又将会开辟一块新的内存空间,这就是所以的写时复制,PHP变量在内核中的如何存储了,下面就讲下引用:

$a = 10;
$b = &$a;

这个时候,内核中存储$a的结构is_refgc标记为true,代表是引用,那么$a和$b都指向了同一个内存地址,当$b=20的时候,$a也会变成20

Atas ialah kandungan terperinci php中的可变变量和引用赋值有什么区别?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:浅谈php可变变量安全Artikel seterusnya:什么是来自php 之外的变量