PHPのリファレンスは、変数、関数、オブジェクトなどの前に&記号を追加することです。 PHP での引用とは、異なる名前が同じ変数の内容にアクセスすることを意味します。 C言語のポインタとは異なり、変数の内容がメモリ上に格納されるアドレスを格納します。
PHP の参照では、2 つの変数を使用して同じコンテンツを指すことができます。
リーリーアドレスによる呼び出しの詳細については説明しません。コードは以下に示されています。
リーリーここでtest(1);を使用するとエラーが発生するので注意してください。
まずコードを見てください:
リーリーこのように、 $a=test(); が取得するものは実際には関数参照の戻りではなく、通常の関数呼び出しと何ら変わりません。理由は、PHP の規定です。 PHP では、 $a=&test(); によって取得されるものが関数の参照戻り値であると規定されています。参照リターンとは何かについては (PHP マニュアルには、参照をバインドする必要がある変数を見つけるために関数を使用する場合に参照リターンが使用されると記載されています)
上記の例を使用して説明します:
$a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a に対する変更は関数内の $b には影響しません。 $a=&test() を通じて関数を呼び出すと、その関数は $b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所にポイントすることで、これと同等の効果が得られます。 ( $a=&b;) $a の値を変更すると $b の値も変更されるので、
を実行した後 リーリーその後、$bの値は5になります。
ここで静的変数を使用するのは、関数の参照戻り値を誰もが理解できるようにするためです。実際、関数の参照戻り値は主にオブジェクトで使用されます。
PHP5 では、オブジェクトのコピーは参照を通じて実装されます。上記の列では、$b=new a; $c=$b; は実際には $b=new a; と同等ですが、場合によっては参照によってオブジェクトを呼び出します。オブジェクトを作成したいのは、元のオブジェクトのコピーであり、元のオブジェクトへの変更がコピーに影響しないことを望みます。このような目的のために、PHP は __clone と呼ばれる特別なメソッドを定義します。
参照の役割: プログラムが比較的大きく、同じオブジェクトを参照する変数が多数あり、オブジェクトを使用した後に手動でクリアしたい場合は、個人的には "&" メソッドを使用してから $ を使用することをお勧めします。 var=null でクリアします。それ以外の場合は、php5 のデフォルトのメソッドを使用します。また、php5 で大きな配列を転送する場合は、メモリ領域を節約できるため、「&」メソッドを使用することをお勧めします。参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:
リーリー
$b の設定は解除されず、$a のみが解除されます。global $var で変数を宣言すると、実際にはグローバル変数への参照が作成されます。それはこれを行うのと同じです:
リーリー
これは、たとえば、unset $var ではグローバル変数の設定が解除されないことを意味します。$this オブジェクトのメソッドでは、$this は常にそれを呼び出すオブジェクトへの参照になります。
PHP におけるアドレスのポインティング (ポインタに似た) 関数は、ユーザー自身によって実装されるのではなく、Zend コアによって実装されます。書き込み操作が発生すると、同じアドレス変数を指すか、オブジェクトはコピーされません。
わかりやすく言うと、次のコードがあるとします。
リーリー
実際、$a と $b は異なるメモリを占有するのではなく、この時点では同じメモリ アドレスを指します。上記のコードに次のコードを追加すると:
リーリー
$a と $b が指すメモリ内のデータは書き換える必要があるため、Zend コアはこの時点で $b 用の $a のデータ コピーを自動的に生成し、メモリの一部を再適用することを自動的に決定します。保管用に。