PHP 参照の役割 (つまり、変数、関数、オブジェクトなどの前にアンパサンドを追加する) について、まず次のプログラムを見てみましょう。
リーリープログラムの実行結果:
リーリー多くの人は、PHP の参照が C のポインターと同じであると誤解しています。実際には、それらは異なり、大きく異なります。配列転送プロセス中に明示的に宣言する必要のない C 言語のポインターを除き、他のポイントは * を使用して定義する必要があります。ただし、PHP のアドレスへのポインター (ポインターと同様) 関数は、はい、PHP の参照は「コピーオンライト」の原則を採用しています。つまり、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。 。
php のデフォルトは値渡しです:
リーリープログラムの実行結果:
リーリーアドレスとして渡したい場合は、& を追加する必要があります。つまり:
リーリープログラムの実行結果:
リーリー言い換えると、& は $a のアドレスを $b に渡します。この場合、2 つの変数はメモリ記憶領域を共有することになります。これは、それらの値が同じであることを意味します。
同じ構文は、参照を返す関数と new 演算子で使用できます。
リーリー参照が行う 2 番目のことは、参照によって変数を渡すことです。これは、呼び出しスコープ内の同じコンテンツを参照する関数内にローカル変数を作成することによって実現されます。簡単に言うと、関数のパラメータはローカル変数への参照です。別の例を次に示します:
リーリーこのコードを実行するには、2 つのパラメーターを関数に渡します。1 つは $a の内容への参照で、もう 1 つは $b の値です。この関数を実行すると、$a の内容が次のようになっていることがわかります。変更されましたが、 $b の内容は変更されていません。
PHP 参照の 3 番目の使用法は、参照リターンです。この使用法は、関数を使用して参照をバインドする必要がある場合に使用されます。参照を返すときは、次の構文を使用します。 簡単に言うと、これはやはり参照関数の戻りです。ただし、パラメーターの受け渡しとは異なり、& 記号は関数定義と関数参照の両方で使用する必要があります。以下に例を示します:
リーリーこの例では、$foo への代入は関数 find_var の戻り参照であるため、$foo->x を代入すると、単純な代入ではなく、find_var の戻り参照が割り当てられます。
PHP 参照の最後の使用法は、参照の配置です。主な用途は 2 つあります。1 つは、グローバル $var で変数を宣言する場合、グローバル変数への参照が実際に確立されることです。つまり、$var =& $GLOBALS["var"]; と同じです。もう 1 つは、オブジェクトのメソッド内での $this の使用法です。$this は常に、それを呼び出すオブジェクトへの参照になります。