ホームページ >バックエンド開発 >PHPチュートリアル >PHP抜粋の詳細説明、PHP参照転送、PHP参照メソッド返却、PHP参照解析の使い方

PHP抜粋の詳細説明、PHP参照転送、PHP参照メソッド返却、PHP参照解析の使い方

WBOY
WBOYオリジナル
2016-06-13 13:02:09735ブラウズ

PHPリファレンスの使い方、PHPリファレンス転送、PHPリファレンスメソッド返却、PHPリファレンス解析について詳しく解説します

PHP リファレンス (&) の詳細説明
2009-05-13 14:30
PHP リファレンス (つまり、変数、関数、オブジェクトなどの前にアンパサンドを追加する)

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

変数リファレンス

PHP のリファレンスでは、2 つの変数を使用して同じ内容を指すことができます
[ php]
$a="ABC";
$b =&$a;
echo $a;//ここに出力: ABC
echo $b;/ここに出力します: ABC
$b="EFG";
echo $a;//ここの $a の値は EFG になるため、EFG が出力されます
echo $b;// ここに EFG を出力します
?>
[/php]

関数のアドレスによる呼び出し
アドレスによる呼び出しについては詳しく説明しません。
[php]
function test( &$a)
{
$a=$a+100;
$b=1;//出力 1
テスト($b) ;?? //ここで関数に渡される $b は、実際には $b の変数の内容が配置されているメモリ アドレスです。関数内の $a の値を変更することで、$b の値を変更できます。
echo "
;";
echo $b;//出力 101
[/php]
ここで test(1); が使用されることに注意してください。エラーが発生します。原因は自分で考えてください

関数リファレンス return
まずはコードを見てください
[php]
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 の値を出力します。
[/php]
以下で説明します:
この方法で $a=test(); によって得られるものは、実際には関数の参照戻りではありません。これは通常の関数と何ら変わりません。理由: これは PHP の規定です。
PHP では $a=&test( ); と規定されています。 このようにして得られるのは、関数
の参照戻り値です。マニュアルには「参照リターンは、参照をバインドする必要がある変数を見つけるために関数を使用したい場合に使用されます。」 この文は長い間理解できませんでした

上記の例を使用します。説明すると、これは $a=test() を使用して関数を呼び出すことを意味します。これは関数の値を $a に代入するだけであり、$a は関数
内の $b に影響を与えません。関数が $a=&test() を通じて呼び出されると、その関数は、返される $b 変数のメモリ アドレスと $a 変数のメモリ アドレスを比較することです。同じ場所を指す
と同等の効果が得られます。 ($a=&b;)、$a の値を変更すると $b の値も変更されるため、
$a=&test() ;
$a=5; を実行した後、 $b の値は 5 になります

関数の参照戻り値を誰もが理解できるように、ここでは静的変数が使用されています。実際、関数の参照戻り値は主に
オブジェクト内のオブジェクト
[php]
class a{
var $abc="ABC"
}
$b= new a; $c=$b;
echo $b->abc;//ここにABCを出力
echo $c->abc;//ここにABCを出力
$b->abc="DEF ";
echo $c->gt;abc;// ここに DEF を出力
?>gt;
[/php]
上記のコードは PHP5 での実行効果です
PHP5 では、オブジェクトコピーは参照によって行われます。上記の列では、 $b=new a; $c=$b; は $b=new a;
のデフォルトではオブジェクトを参照によって呼び出すことになります。オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないようにしたい場合、PHP では、

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


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

$a = 1;
unset ($a)>?

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


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

$var =& $GLOBALS["var"];
?>
これは、たとえば次のことを意味します。 unset $var はグローバル変数の設定を解除しません。

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


//ここでまたちょっとしたエピソードです
PHP におけるアドレスのポインティング (ポインタに似た) 関数はユーザー自身が実装するのではなく、Zend コアによって実装され、参照されますPHP では、これは「コピーオンライト」の原則です。つまり、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。

簡単に言えば
1: 次のコードがある場合
[php]
$a="ABC";
$b=$a; php ]
実際には、$a と $b が異なるメモリを占有するのではなく、この時点では同じメモリ アドレスを指します

2: 上記に次のコードを追加するとcode
[php]
$a="EFG";
[/php]
$a と $b が指すメモリ内のデータが書き換えられるため、Zend コアは自動的にこの判断により、$a のデータ コピーが $b に自動的に生成され、メモリの一部がストレージに再適用されます

要するに、この変数を他の目的で使用したい場合は、値渡しを使用すると、渡された変数は前後で変化しません。この変数を変更または処理する場合は、参照渡しして、その変数が操作後に自動的に変更されるようにします。

概要: この変数を扱うときは、この変数を参照によって渡します。この変数を他の目的に使用する場合は、値によって渡します。

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