以下で説明します: この方法で $a=test(); によって得られるものは、実際には関数の参照戻りではありません。 理由: これは PHP の規定です。 $a=&test(); メソッドは関数の参照戻り値であると規定されています 参照戻り値とは何かについては、PHP マニュアルには次のように書かれています。 ) これはでたらめです 長い間理解できませんでした
上記の例を使って説明すると、 $a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a への変更は関数内および $ 呼び出し時の $b には影響しません。 a=&test() メソッド内の関数。その関数は、$b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所にポイントすることであり、これと同等の効果が得られます ($a =&b;) $a の値を変更すると $b の値も変更されるので、 を実行した後
function &test() { static $b=0;//静的変数を宣言 - $b=$b+1;
- echo $b; }
-
- $a=test ();//このステートメントは $b の値を 1 として出力します
- $a=5;
- $a=test();//このステートメントは $b の値を 2 として出力します
-
- $a=&test( );//このステートメントは $b の値を 3 として出力します
- $a=5;
- $a=test();//このステートメントは $b の値を 6 として出力します
-
-
- コードをコピーします
-
-
/*ここでまたちょっとしたエピソードです PHP におけるアドレスのポインティング (ポインタに似た) 関数はユーザー自身によって実装されるのではなく、Zend コアによって実装されます。 PHP における参照は「copy-on-」を使用します。 write" 原則として、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。
簡単に言うと 1: 次のコードがあるとします- */
- $a="ABC";
- $b=$a;
- /*
- 実際、$a と $b は両方とも同じメモリを指します。このとき $a と $b が別のメモリを占有するわけではありません
-
- 2: 上記のコードに次のコードを追加すると
- */
- $a="EFG"; なので、$a と $b は同じになります。 b をポイントします。メモリ内のデータを再度書き込む必要があります。このとき、Zend コアは $b 用の $a のデータ コピーを自動的に決定し、ストレージ用にメモリの一部を再適用します*/
- 。
-
- コードをコピー
-
-
-
-
|