ホームページ  >  記事  >  バックエンド開発  >  PHPリファレンス(&)_PHPチュートリアルの詳しい説明

PHPリファレンス(&)_PHPチュートリアルの詳しい説明

WBOY
WBOYオリジナル
2016-07-21 15:43:08715ブラウズ

PHP における参照の意味は、異なる名前が同じ変数の内容にアクセスすることです。
C 言語のポインターとは異なります。 C言語のポインタは、変数の内容がメモリに格納されているアドレスを格納します
変数の参照
PHPの参照では、2つの変数を使用して同じ内容を指すことができます

コードをコピーします コードは次のとおりです:

$a="ABC";
echo $a;// ここに出力: ABC
echo $b;// ここに出力: ABC
$ b="EFG ";
echo $a;//ここでの $a の値は EFG になるので、EFG が出力されます
echo $b;//ここに EFG が出力されます


アドレスによる関数の呼び出し
アドレスで電話します 早速、以下のコードを入力しましょう

コードをコピーします コードは次のとおりです:
function test(&$a)
{
$a=$a +100;
}
$b=1;
echo $b;//出力 1
test($b); // ここで $b が関数に渡されるのは、$b の変数の内容が格納されるメモリ アドレスです。関数内の $a の値を変更することで $ を変更できます。 b
echo "
";
echo $b;//出力 101


ここで(1);を使用するとエラーが発生します

関数参照
まずコードを見てください

コードは以下の通りです function &test() {
static $b=0;//静的変数を宣言
$b=$b+1;
return $b;
$a=test();/ /このステートメントは $b の値を 1 として出力します
$a=5;
$a=test();//このステートメントは $b の値を 2 として出力します
$a=&test();/ /このステートメントは $b の値を 3 として出力します
$a=5;
$a=test();//このステートメントは $b の出力値は 6 になります


以下の説明:
このように、 $a=test(); は実際には関数参照の戻り値を取得するわけではなく、通常の関数呼び出しと何ら変わりません。これは PHP の規則です
PHP では、$a=&test(); によって取得されるものは次のように規定されています。は関数の参照リターンです
参照リターンとは何かというと、(PHPのマニュアルには「参照リターンは関数を使って参照をバインドする場所を見つけたいときに使います。変数が上にある場合に使います。)」とあります。ナンセンスなため、長い間理解できませんでした。上記の例を使って説明すると、$a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a は変更しても $ には影響しません。関数内の b
そして、$a=&test() を通じて関数が呼び出されるとき、その関数は、$b 変数のメモリ アドレスを $a 変数のメモリ アドレスにポイントすることです
。この効果と同等の結果が得られます ($a=&b;) したがって、$a の値を変更すると $b の値も変更されるため、
$a=&test();
$a= 5; を実行した後、値は$b の値は 5 になります
ここでは関数の参照戻り値を誰もが理解できるように静的変数を使用しています

オブジェクト参照




コードをコピーします

。コードは次のとおりです:
var $abc="ABC" }
$b=$b; / / ここに ABC を出力 echo $c->abc;// ここに ABC を出力 $b->abc="DEF"; // ここに DEF を出力 ?>
上記のコードは PHP5 での実行効果です
PHP5 では、オブジェクトのコピーは参照を通じて行われます。上記の列の $b=new a; $c=$b; は、実際には $b=new a; $c=&$b; と同等ですが、場合によってはオブジェクトを参照します。オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないことを望みます。この目的のために、プログラムが比較的大きい場合、PHP は __clone と呼ばれる特別なメソッドを定義します。 、同じオブジェクトを参照する 変数が多く、使用後にオブジェクトを手動でクリアしたい場合は、個人的には、「&」メソッドを使用してから、$var=null を使用してクリアすることをお勧めします。また、php5 では、メモリ容量を節約できるため、配列の転送には「&」メソッドを使用することをお勧めします。


参照解除

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



コードは次のとおりです:


$b =& $a;
unset ($a);

$b の設定は解除されず、$a のみが解除されます。

グローバル参照
グローバル $var で変数を宣言すると、実際にはグローバル変数への参照が作成されます。つまり、これを行うのと同じです:
コードをコピーします コードは次のとおりです:

$var =& $GLOBALS["var"]
?> ;

これは、たとえば、unset $var はグローバル変数の設定を解除しません。
$this
オブジェクトのメソッドでは、$this は常にそれを呼び出すオブジェクトへの参照です。

//ここでまたちょっとしたエピソードです
​​ PHP におけるアドレスのポインティング (ポインタに似た) 関数は、ユーザー自身が実装するのではなく、Zend コアによって実装されます。PHP の参照は「コピーオン」の原則を採用しています。 -write"。つまり、書き込み操作が発生しない限り、同じアドレスを指す変数またはオブジェクトはコピーされません。
簡単に言うと
1: 次のコードがあるとします
$a="ABC";
$b=$a;
実際、この時点では $a と $b は両方とも $ ではなく同じメモリ アドレスを指します。 aと$bは別のメモリを占有します
2: 上記のコードに次のコードを追加すると
$a="EFG";
このとき$aと$bが指すメモリのデータが書き換えられるので、 Zend コア $b 用の $a のデータ コピーを自動的に決定して生成し、ストレージ用のメモリを再適用します。

www.bkjia.com本当http://www.bkjia.com/PHPjc/320833.html技術記事 PHP における参照の意味は、異なる名前が同じ変数の内容にアクセスすることです。これは、C 言語のポインターとは異なります。 C言語のポインタは変数の内容をメモリに保存します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。