まず、代入演算子 = の動作を説明します。次の例を見てください:
コードをコピーします コードは次のとおりです:
$ i = 0;
$j = $i;
echo $j; // 出力 0
$arr; 0);
$arr2 = $arr;
$arr[0]; //出力 0
クラス B
$i = 0;
$b = new B();
$c->i = 1; >echo($b- >i); //出力 1
この例からわかるように、= 演算子の右側の変数が基本データ型であるか、配列の場合、= 演算子は右側の変数のコピーを取得します。 代入を左側の変数にコピーします。右側の変数がクラスなどの基本的なデータ型または配列でない場合、= は右側の変数への参照を割り当てます。左側の変数。注: これは、右側の変数が指すコンテンツ領域ではなく、右側の変数への参照です。詳細については、以下の例を参照してください。
$a = new A(); $b_r = &$a; >$b_a = null; var_dump($a); // オブジェクト(A)[2] を出力します。$a が指す内容はそのままです。
$b_r = null; ); //Print null、$a が指すコンテンツはまだ存在します ポイントされたコンテンツはクリアされます
上記の例は、$var = &$a を使用して値を割り当てる場合も示しています。 $var=null を使用して変数 $var を破棄すると、実際には $var が指すコンテンツが null に設定されます。これは、コンテンツ領域を指す参照変数を破棄するために使用できることも意味します。コンテンツ領域のコンテンツ。したがって、変数 $var を破棄するには、unset($var) を使用します。 PS: 実際、この方法で $var を割り当てることは単なる参照であり、破棄されるかどうかは関係ありません。これは、$var を unset によって破棄する必要があることを意味します。
以下は「ユーザーマニュアル」の「引用説明」の例です:
$a =& $b;
以下にそのような説明があります:
Thisつまり、$a と $b は同じ変数を指します。
注: ここで $a と $b はまったく同じです。これは、$a が $b を指すこと、またはその逆を意味するのではなく、$a と $b が同じ場所を指すことを意味します。
「参照とは何か」について少し説明します。 int i = 0; int *p = &i; > p = &j;
上記のコードでは、p は i のメモリ アドレスを指すポインタであり、*p=&j は p ポインタのポインティングを変更することを示し、*p= として表されます。 111 この式は i の内容を変更します。これは PHP では当てはまりません。次の例では、
$i = 0;
$p = &$i; によって $i の値がすぐに変更されます。