PHP での参照は、変数、関数、オブジェクトなどの前に & 記号を追加することです。PHP での参照は、異なる名前が同じ変数の内容にアクセスすることを意味します。PHP での参照の使用方法を説明します。参照することができます
C言語のポインタとは異なります。言語のポインタは、変数の内容がメモリに格納されているアドレス変数への参照を格納します。
PHP の参照では、2 つの変数を使用して同じ内容を指すことができます
$a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG
アドレスによる関数呼び出し。
アドレスによる呼び出しについては詳しく説明しません。コードはすぐ下にあります。
ここで test(1); を使用するとエラーが発生することに注意してください。理由は自分で考えてください
関数のリファレンスリターン
まずコードを見てください
<?php function test(&$a) { $a = $a + 100; } $b = 1; echo $b; //输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b; //输出101 ?>
以下の説明:
このように、$a=test(); は実際には関数の参照戻りは通常の関数呼び出しと変わりません。これは PHP の規則であり、関数の参照戻りは $a=&test(); によって取得されると規定されています。参照リターン?(PHPマニュアルには、参照リターンは関数を使用して参照を見つけたい場合に使用されます。それが変数にバインドされている場合に使用する必要があります。)このナンセンスのために、私は長い間それを理解できませんでした。
上記の例を使って説明すると、
その後、$b の値は 5 になります
これは、静的変数を使用する前に関数の参照戻り値を理解してもらうためです。実際、関数の参照戻り値はオブジェクト内で多くの用途があります
Reference。オブジェクトの
<?php function &test() { static $b = 0; //申明一个静态变量 $b = $b + 1; echo $b; return $b; } $a = test(); //这条语句会输出 $b的值 为1 $a = 5; $a = test(); //这条语句会输出 $b的值 为2 $a = & test(); //这条语句会输出 $b的值 为3 $a = 5; $a = test(); //这条语句会输出 $b的值 为6 ?>
PHP5 では、オブジェクトのコピーは参照を通じて行われます。上記の列の $b=new a; $c=$b; は、実際には $b=new a; $c=&$b; と同等ですが、場合によってはオブジェクトを参照します。オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないことを望みます。この目的のために、PHP は __clone という特別なメソッドを定義します
。プログラムは比較的大きいため、同じオブジェクトを参照する変数が多数あり、オブジェクトを使用した後に手動でクリアしたい場合は、「&」メソッドを使用し、その後 $var=null を使用してクリアすることを個人的にお勧めします。それ以外の場合は、php5 のデフォルトのメソッドを使用してください。また、php5 で大きな配列を転送する場合は、メモリ領域を節約できるため、「&」メソッドを使用することをお勧めします。
参照解除
参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:
<?php
class a {
var $abc = "ABC";
}
$b = new a;
$c = $b;
echo $b->abc; //这里输出ABC
echo $c->abc; //这里输出ABC
$b->abc = "DEF";
echo $c->abc; //这里输出DEF
?>
グローバル参照
$a = 1; $b =& $a; unset ($a);を実行するのと同じです。これは、たとえば、unset $var ではグローバル変数の設定が解除されないことを意味します。
$this
//ここでまたちょっとしたエピソードです
phpのアドレスのポインティング(ポインタに似た)機能はユーザー自身が実装するのではなく、Zendコアによって実装されます。phpの参照は「copy-on」を使用します。 -write" 原則として、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。1: 次のコードがあるとします
$var =& $GLOBALS["var"];
実際、この時点では、$a と $b は両方とも同じメモリ アドレスを指しており、$a と $b が占有しているのではありません。さまざまな思い出2 :上記のコードに次のコードを追加すると
$a="ABC"; $b=$a;
以上がこの記事の全内容となりますので、皆様の学習のお役に立てれば幸いです。
関連する推奨事項:
PHP
名前空間に参加するメリットは自動読み込みに便利 PHPエラーレベル設定と原理分析
phpプロセス制御ブレークステートメント
php フロー制御 continue ステートメント
以上がPHPにおける参照記号(&)の使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。