PHP变量在赋值的时候是增加的引用计数,并不是又创建了一块内存空间
但是当新的变量值变更时,值从新赋予新的值时,就会减掉刚才的引用计数,并且从新创建内存空间.
上面的内容是显而易见的,重新赋值自然会重新创建内存空间,但是有一种情况也会发生这样的事,那就是在使用到引用符&的时候,也会发生复制.
例如下面的代码:
<?PHP $a="shihan"; $b=$a$c=; xdebug_debug_zval('a','b');
a: (refcount=3,is_ref=0)='shihan'
b: (refcount=3,is_ref=0)='shihan'
$b=&
a: (refcount=2,is_ref=1)='shihan'
b: (refcount=2,is_ref=1)='shihan'
下面这个$b=&$a会产生复制,当进行函数传参时,内容占用增大
<?; function test2($d){} test2($b); xdebug_debug_zval('a','b'); var_dump(memory_get_usage());//633208 <?var_dump(memory_get_usage());//633128
当没有在函数内部更改这个值的需求时,不要用引用