引用是一种指向其他数据类型的结构,类似C语言中指针的概念。当修改引用类型的变量时候,其修改将反映到实际引用的变量上。辣么当我们使用$a = &$b这样一个引用时候发生了什么呢?来我们来看看流程吧
- $a = &$b ,首先为$a 变量分配一个Zend_reference结构,内嵌了一个zval ,这时候zval.value指向原来zval的value
- 将原来$b 的类型改为IS_REFERENCE引用类型,原来zval的value指向新建的zend_reference结构
struct _zend_reference {
zend_refcounted_h gc;
zval val;
};
<?php
$b = "Hello world";
$a = &$b;
来举个栗子:
注意:使用引用,只有通过&产生,无法通过赋值来传递,例如:
<?php
$b = "Hello World";
$a = &$b;
$c = $a; //此时$c不是一个引用