PHP5中是否引用了字符串?

时间:2011-03-11 20:43:34

标签: php string reference-counting

在PHP5中作为参数传递或分配给变量时是引用还是复制字符串?

2 个答案:

答案 0 :(得分:7)

debug_zval_dump()功能可以帮助您回答这个问题。


例如,如果我运行以下代码部分:

$str = 'test';
debug_zval_dump($str);      // string(4) "test" refcount(2)

my_function($str);
debug_zval_dump($str);      // string(4) "test" refcount(2)

function my_function($a) {
    debug_zval_dump($a);    // string(4) "test" refcount(4)
    $plop = $a . 'glop';
    debug_zval_dump($a);    // string(4) "test" refcount(4)
    $a = 'boom';
    debug_zval_dump($a);    // string(4) "boom" refcount(2)
}

我得到以下输出:

string(4) "test" refcount(2)
string(4) "test" refcount(4)
string(4) "test" refcount(4)
string(4) "boom" refcount(2)
string(4) "test" refcount(2)


所以,我会说:

  • 字符串被“refcounted”,当传递给函数时(可能,当分配给变量时)
  • 但不要忘记PHP 写时复制


有关更多信息,请参阅以下几个可能有用的链接:

答案 1 :(得分:1)

它们是副本或解除引用。