php中的可变变量和引用赋值有什么区别?
程序员文章站
2022-04-05 17:17:29
...
从PHP内核的角度跟你解释下吧,你可以深入理解下,就完全明白了;
PHP的变量在内核中都是通过C语言的结构zval来存储的(你没学过C,你可以理解为是个对象,里面的成员变量都是类的属性,暂时先这样理解),zval结构如下:
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中的可变变量和引用赋值有什么区别?的详细内容,更多请关注其它相关文章!
上一篇: css全局样式有什么意义
下一篇: css怎么去掉select箭头
推荐阅读
-
java中的值传递和引用传递有什么区别呀?
-
Python中实现变量赋值传递时的引用和拷贝方法
-
php 中的session 和cakephp中的session有什么区别,该怎么解决
-
php 中的session 和cakephp中的session有什么区别,该怎么解决
-
PHP中传值赋值和引用赋值的区别是什么?
-
php 中的session 和cakephp中的session有什么区别,该怎么解决
-
php中的可变变量和引用赋值有什么区别
-
php中的可变变量和引用赋值有什么区别
-
PHP中全局变量global和$GLOBALS[]有什么样的区别
-
php中empty和array_filter在判断数组是否为空的时候有什么区别