概念

把A变量赋值给B变量时,不会立刻申请新的内存来存放B变量的值,而是通过一个计数器来公用内存;只有在其中一个引用指向变量的值发生变化时,才申请新空间保存值。
总结:延迟分配资源。

好处

只有在真正需要使用资源时才占用资源,减少资源的占用。

实现方式

  • ref_count,引用计数,标记此zval被多少个变量引用,为0时被销毁;
  • is_ref,强制引用数,标记是否用&的强制引用;
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$foo = 1;
xdebug_debug_zval('foo');
$bar = $foo;
xdebug_debug_zval('foo');
$bar = 2;
xdebug_debug_zval('foo');
?>

//-----执行结果-----
foo: (refcount=1, is_ref=0)=1
foo: (refcount=2, is_ref=0)=1
foo: (refcount=1, is_ref=0)=1

应用场景

  • php变量的多次赋值;
  • php函数的参数传递;
  • linux,fork进程;