首頁 >後端開發 >php教程 >php中的可變變數和引用賦值有什麼不同?

php中的可變變數和引用賦值有什麼不同?

怪我咯
怪我咯原創
2017-06-20 09:56:411246瀏覽

从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

以上是php中的可變變數和引用賦值有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn