在php5中,当作为参数传递或分配给变量时,字符串是否被引用或复制?

最佳答案

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确实是在写时复制的
有关更多信息,以下是一些可能有用的链接:
Reference Counting Basics
Do not use PHP references
Maitrise de la gestion des variables en PHP(法语)

10-06 00:27