3

PHP5で、引数として渡されたとき、または変数に割り当てられたときに、文字列が参照またはコピーされますか?

4

2 に答える 2

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)


だから、私は言うだろう:

  • 文字列は、関数に渡されると「参照カウント」されます(そして、おそらく、変数に割り当てられると)
  • しかし、PHPは書き込み時にコピーすることを忘れないでください


詳細については、次のリンクを参考にしてください。

于 2011-03-11T20:51:59.257 に答える
1

They are copies or dereferenced.

于 2011-03-11T20:50:59.083 に答える