PHP 参照 (つまり、変数、関数、オブジェクトなどの前に & 記号を追加すること)、PHP における参照とは、異なる名前が同じ変数の内容にアクセスすることを意味します。 C言語のポインタとは異なります。 C言語におけるポインタは、変数の内容とメモリ上に格納されているアドレスを格納します。
1. 変数参照
PHP リファレンスでは、2 つの変数を使用して同じコンテンツを指すことができます
<?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?>
2. 関数参照の転送 (アドレスによる呼び出し)
以下では、アドレスによる呼び出しについては詳しく説明しません。コード
<?php function test(&$a) { $a=$a+100; } $b=1; echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b;//输出101 ?>
を記述する場合、ここで test(1) を実行するとエラーが発生することに注意してください。その理由は自分で考える必要があります。
注: 上記の「test($b);」では $b の前にアンパサンドを追加しないでください。ただし、関数「call_user_func_array」では、渡されたパラメータを参照したい場合は、次のようにアンパサンドが必要です。次のコード:
<?php function a(&$b){ $b++; } $c=0; call_user_func_array('a',array(&$c)); echo $c; //输出 1 ?>
3. 関数参照 return
まずコードを見てください
<?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 ?>
以下の説明:
このようにして得られるものは、実際には関数参照 return ではありません。通常の関数呼び出しと違う理由としては、これはPHPの規定です
PHPでは、$a=&test();で得られるものが関数の参照戻り値であると規定されています
その参照戻り値とは何かというと、マニュアルには、参照リターンは関数を使用して参照を見つけたいときに使用され、それがどの変数にバインドされているときに使用されるべきであると書かれています。)このナンセンスなため、私は長い間理解できませんでした
4.
<?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 ?>
上記のコードはPHP5での実行効果です
PHP5ではオブジェクトの代入は参照処理となります。上記の列の $b=new a; $c=$b; は、実際には $b=new a; $c=&$b; と同等です
PHP5 のデフォルトでは、オブジェクトを参照によって呼び出すことができます。オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないことを望みます。この目的のために、PHP5 は __clone と呼ばれる特別なメソッドを定義します。
PHP 5 では、new は自動的に参照を返すため、ここでの =& の使用は廃止され、E_STRICT レベルのメッセージが生成されます。
php4 では、オブジェクトの割り当てはコピープロセスです。
例: $b=new a、new a は匿名のオブジェクトインスタンスを生成し、このときの $b はこの匿名オブジェクトのコピーです。同様に、$c=$b も $b の内容のコピーです。したがって、php4 では、メモリ領域を節約するために、$b=new a を参照モード、つまり $b=& new a に変更するのが一般的です。
5. 参照の役割
プログラムが比較的大きく、同じオブジェクトを参照する変数が多数あり、オブジェクトを使用した後に手動でクリアしたい場合は、個人的には「&」メソッドを使用することをお勧めします。それ以外の場合は、php5 のデフォルトのメソッドを使用します。また、php5 で大きな配列を転送する場合は、メモリを節約できるため、「&」メソッドを使用することをお勧めします。空間。
6. 参照解除
参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されます。これは、変数の内容が破壊されることを意味するものではありません。例:
<?php $a = 1; $b =& $a; unset ($a); ?>
は $b の設定を解除せず、$a のみを設定解除します。
7.グローバル参照
global $varで変数を宣言すると、実際にはグローバル変数への参照が確立されます。これは、次のことを行うのと同じです:
<?php $var =& $GLOBALS["var"]; ?>
これは、たとえば、unset $var はグローバル変数の設定を解除しないことを意味します。
関数内でグローバルとして宣言された変数に参照が割り当てられている場合、その参照は関数内でのみ表示されます。これは、$GLOBALS 配列を使用することで回避できます。
例 関数内でグローバル変数を参照する
<?php $var1 = "Example variable"; $var2 = ""; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 =& $var1; // visible only inside the function } else { $GLOBALS["var2"] =& $var1; // visible also in global context } } global_references(false); echo "var2 is set to '$var2'\n"; // var2 is set to '' global_references(true); echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable' ?>
global $var; を $var =& $GLOBALS['var']; の省略形として扱います。したがって、別の参照を $var に代入しても、ローカル変数への参照が変更されるだけです。
以上がphpで引用したいくつかの使用例のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。