PHP の & シンボルについて議論しているネチズンを見かけました。その使用法を完全に理解するには、変数の 2 つの形式について議論する必要があります。
PHP 変数はこのようにメモリに保存されます。変数が保存するのは値の内容ではなく、アドレスです。例:
$a = 1;
変数 $a には値 1 が直接格納されているようです。実際の状況では、PHP インタープリターは変数 $a を作成し、値 1 をメモリのどこかに保存し、その値のアドレスを変数 $a に保存します。
値を取得する必要がある場合は、まず変数 $a のアドレスを見つけて、次にそのアドレスに基づいて変数の値を見つけます。
下を見てください:
echo $a;
は 1 を出力します。PHP インタープリターは次のようにコードを完成させます: $a に格納されているアドレスを見つけ、そのアドレスに基づいてメモリのどこかに格納されている値を見つけて、それを画面に出力します。
単純なコードのように見えますが、プロセスは次のとおりです。
さらに下を見てください:
$a = 1;$b = &$a;
ここで、変数 $b は興味深い演算を実行します。& 記号は、$a 変数に格納されているアドレスを取り出し、それを $b 変数に格納します。
次に、次のコードを使用すると:
echo $b;
結果も出力されます 1. PHP インタープリターは、まず $b に格納されているアドレスを取り出し、次にそのアドレスに基づいて値を見つけます。次の操作を実行すると:
rrree
$a の値を変更すると $b も変更されることがわかります。実際には、逆に、$b の値が変更されると、それに応じて $a の値も変更されます。
この時点で、変数 $a と $b が同じアドレスを格納し、同じ値を指していることが確認できます。
そして、それらは同じ変数を表していると結論付けることができます。
さらに要約すると、2 つの変数が同じアドレスを格納している場合、それらは同じ変数であると結論付けることができます。
いくつかの内容を理解した後、値の型と参照型の紹介を開始します。
まず次のコードを見てみましょう:
$a = 2;echo $b; //输出2
$a = 1;$b = $a;
$a の値を $b に代入します。つまり、$a の値を変更した後、$b の値は変更されません。は、異なるアドレスを指す 2 つの異なる変数です。さまざまな変数を作成するこの形式の代入は、値型と呼ばれます。
もう一度見てください:
$a = 2;echo $b; //输出 1
また、$a の値を $b に代入します。$a を変更すると、$b も変更されます。つまり、$a と $b は同じ変数であり、同じアドレスを指します。新しい変数を作成しないこの形式の代入は、参照型と呼ばれます。
PHP では、文字列、整数、浮動小数点、配列などのほとんどの変数型は値型ですが、クラスやオブジェクトは参照型です。これらを使用する場合は、この点に注意する必要があります。