ホームページ  >  記事  >  バックエンド開発  >  PHPリファレンス

PHPリファレンス

WBOY
WBOYオリジナル
2016-07-25 09:09:17986ブラウズ

以下で説明します:
この方法で $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;//静的変数を宣言
  1. $b=$b+1;
  2. echo $b; }
  3. $a=test ();//このステートメントは $b の値を 1 として出力します
  4. $a=5;
  5. $a=test();//このステートメントは $b の値を 2 として出力します
  6. $a=&test( );//このステートメントは $b の値を 3 として出力します
  7. $a=5;
  8. $a=test();//このステートメントは $b の値を 6 として出力します
  9. コードをコピーします
/*ここでまたちょっとしたエピソードです
​​ PHP におけるアドレスのポインティング (ポインタに似た) 関数はユーザー自身によって実装されるのではなく、Zend コアによって実装されます。 PHP における参照は「copy-on-」を使用します。 write" 原則として、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。
簡単に言うと
    1: 次のコードがあるとします
  1. */
  2. $a="ABC";
  3. $b=$a;
  4. /*
  5. 実際、$a と $b は両方とも同じメモリを指します。このとき $a と $b が別のメモリを占有するわけではありません
  6. 2: 上記のコードに次のコードを追加すると
  7. */
  8. $a="EFG"; なので、$a と $b は同じになります。 b をポイントします。メモリ内のデータを再度書き込む必要があります。このとき、Zend コアは $b 用の $a のデータ コピーを自動的に決定し、ストレージ用にメモリの一部を再適用します*/
  9. コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。