PHP変数が宣言されて代入されると、変数名はシンボルテーブルに保存され、値とクラス情報はzvalに保存されますis_ref、refcount、value、type、zvalソース。コードは次のとおりです
ここでは、zval がコピーされるとき、または新しいメモリ空間が開かれるときの分析を示します
1 is_ref=0 かつ refcount>1 の場合、zval を指す変数の値が変更されると、新しい zval、refcount -- 元の zval の例: $a=1;$b=$a;$b=2;、zval がコピーされます。つまり、元の ab は同じものを指します。 zval とその後の b は、新しい割り当て zval
2 を使用します。 is_ref=0 かつ refcount>1 の場合、zval が参照変数に割り当てられている場合、割り当てに使用される変数と割り当てられる変数は同じ元の変数を使用します。 zval、他のものは元の zval を指します。変数は新しくコピーされた zval を指し、refcount が再計算されます。例: $a=1;$b=$a;$c=$a;$d= &$a;、このとき、ad は元の zval を使用し、bc は新しくコピーされた zval を使用します
3 is_ref=1 および refcount>1 の場合、zval が非参照変数にコピーされる場合、非参照変数新しくコピーされた zval と元の zval が使用されます。refcount は変更されません。たとえば、$a=1;$b=&$a;$c=$a の場合、ab は元の zval を使用し、c は新しくコピーされた zval を使用します。
zval の値の型を表す type マクロは次のように定義されます