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

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

怪我咯
Lepaskan: 2023-03-10 21:00:01
asal
1296 orang telah melayarinya

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

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

举个例子,php代码如下:

$a = 10;
$b = $a;
Salin selepas log masuk

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

$a = 10;
$b = &$a;
Salin selepas log masuk

这个时候,内核中存储$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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan