php 函数调用引用计数影响

function func2($a)
{
    xdebug_debug_zval('a');
}
function func($b)
{
    func2($b);
    debug_zval_dump($b);
    xdebug_debug_zval('b');


    $b = 1;
    xdebug_debug_zval('b');
}


$a = array(1);
$a= '2';
xdebug_debug_zval('a');
func($a);
$b = &$a;
xdebug_debug_zval('b');
$b = 2;
xdebug_debug_zval('b');
class A{
};
$aa = new A();

xdebug_debug_zval('aa');

输出

a: (refcount=1, is_ref=0)='2'
a: (refcount=5, is_ref=0)='2'
string(1) "2" refcount(4)
b: (refcount=3, is_ref=0)='2'
b: (refcount=1, is_ref=0)=1
b: (refcount=2, is_ref=1)='2'
b: (refcount=2, is_ref=1)=2
aa: (refcount=1, is_ref=0)=class A {  }

注意一次函数调用引用计数+2  

猜想:新建临时变量 新建函数内部变量 总共两次 实际情况 因为 php  函数参数传递都是可变参数形式(参考c标准库可变参数原理) zend_parse_parameters 有两次赋值过程

弱语言 所有函数 都是可变参数

你可能感兴趣的:(php 函数调用引用计数影响)