ホームページ  >  記事  >  バックエンド開発  >  PHPの参照(&)記号の詳しい説明

PHPの参照(&)記号の詳しい説明

WBOY
WBOYオリジナル
2016-07-25 08:57:09876ブラウズ
  1. $a="ABC";
  2. $b =&$a;
  3. echo $a;//ここに出力: ABC
  4. echo $b;//ここに出力: ABC
  5. $b= "EFG";
  6. echo $a;//ここの$aの値がEFGになるのでEFGが出力される
  7. echo $b;//ここにEFGが出力される
  8. ?>
コードをコピー

2, function転送アドレス転送 アドレスによる呼び出しの詳細については説明しません。コードはすぐ下にあります。

  1. function test(&$a)
  2. {
  3. $a=$a+100;
  4. }
  5. $b=1;
  6. echo $b;//output 1
  7. test($ b); //ここで関数に渡される $b は、実際には $b の変数の内容が配置されているメモリアドレスです。関数内で $a の値を変更することで、$b の値を変更できます
  8. echo "
    " ;
  9. echo $b;//Output 101
  10. ?>
コードをコピー

注: ここで test(1); を実行すると、エラーが発生します。

3、関数参照の戻り値

  1. function &test()

  2. {
  3. static $b=0;//静的変数を宣言
  4. $b=$b+1;
  5. echo $b;
  6. return $b;
  7. }

  8. $a=test();//このステートメントは $b の値を 1

  9. $a=5;
  10. $a=test(); として出力します。 //このステートメントは $b の値を 2

  11. $a=&test();//このステートメントは $b の値を 3 として出力します

  12. $a=5;
  13. $ a=test();//このステートメントは $b の値を 6 として出力します
  14. ?>
コードをコピー

説明: このように、 $a=test(); が取得するものは実際には関数参照の戻り値ではなく、通常の関数呼び出しと何ら変わりません。 理由は:PHPの規制 PHP では、 $a=&test(); によって取得されるものが関数の参照戻り値であると規定されています。 参照リターンとは何ですか (PHP マニュアルには、参照をバインドする必要がある変数を見つけるために関数を使用したい場合に参照リターンが使用されます。) と記載されています。

関数を呼び出す

$a=test() メソッドは、関数の値を $a に代入するだけであり、$a への変更は関数内の $b には影響しません。 $a=&test() を介して関数を呼び出すと、その関数は $b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所にポイントします。 つまりこれと同等の効果が得られる($a=&b;)ので、$aの値を変更すると$bの値も変更されるので、実行後

  1. class a{
  2. var $abc="ABC";
  3. }
  4. $b=new a;
  5. $c=$b;
  6. echo $b->abc;//ここABC を出力
  7. echo $c->abc;//ABC をここに出力
  8. $b->abc="DEF";
  9. echo $c->abc;//DEF をここに出力
  10. ?>
コードをコピーします

上記のコードは、PHP5 で実行した場合の効果です PHP5 では、オブジェクトのコピーは参照によって実現されます。上の列では、$b=new a; $c=$b; は $b=new a; と同等です。 PHP5 のデフォルトでは、参照によってオブジェクトを呼び出しますが、オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないようにしたい場合があります。この目的のために、PHP は __clone と呼ばれる特別なメソッドを定義しています。

5、引用符の役割 プログラムが比較的大きく、同じオブジェクトを参照する変数が多数あり、オブジェクトを使用した後に手動でクリアしたい場合は、個人的には「&」メソッドを使用し、それ以外の場合は $var=null を使用してクリアすることをお勧めします。また、php5 で大きな配列を転送する場合は、メモリ領域を節約できるため、「&」メソッドを使用することをお勧めします。

6、引用符を外します 参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例えば:

  1. $a = 1;
  2. $b =& $a;
  3. unset ($a);
  4. ?>
コードをコピー

は$bを設定解除しません、ただ$a。

7、グローバル参照 global $var を使用して変数を宣言すると、実際にはグローバル変数への参照が作成されます。 これと同じです:

  1. $var =& $GLOBALS["var"];
  2. ?>
コードをコピー

これは、たとえば、unset $var ではグローバル変数の設定が解除されないことを意味します。

$これ オブジェクト メソッドでは、$this は常に、それを呼び出すオブジェクトへの参照になります。

PHP におけるアドレスのポインティング (ポインタに似た) 関数は、ユーザー自身によって実装されるのではなく、Zend コアによって実装されます。書き込み操作が発生すると、同じアドレス変数を指すか、オブジェクトはコピーされません。

1、次のコードがある場合

$a="ABC"; $b=$a;

実際、この時点では、$a と $b が異なるメモリを占有するのではなく、両方とも同じメモリ アドレスを指します

2.上記のコードに以下のコードを追加すると

$a="EFG";

$a と $b が指すメモリ内のデータは書き換える必要があるため、この時点で Zend コアは $b 用の $a のデータ コピーを自動的に生成し、メモリの一部を再適用するかどうかを自動的に決定します。保管用に。

これはPHPでの参照記号の使用法についてです。皆さんのお役に立てれば幸いです。 興味があるかもしれない記事: 値渡しによるphpリファレンスの例を詳しく解説 phpで引用したサンプルコード phpで引用した例を詳しく解説 PHPリファレンスについての説明 PHP変数参照、関数アドレス、オブジェクト参照の分析例 値渡しによるphp参照の詳細な紹介 例を通して、PHP での値渡しと参照渡しの違いを理解します 例を通してPHPアドレス参照の効率の問題を見てみましょう PHP参照アドレスの変数値の変更に関する問題 PHPの引用、「&」の説明



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。