PHP 参照の役割 (つまり、変数、関数、オブジェクトなどの前にアンパサンドを追加する) について、まず次のプログラムを見てみましょう。
コードをコピー コードは次のとおりです:
$a = 100; //変数 a を宣言
$b = &$a; //変数 b を宣言、独立変数 a を参照
echo " $a
";
echo "$b
";
$a++; //変数 a が 1 増加します
echo "$a
";
echo " $b
";//変数 b を確認します。これも 1 増加します。これは、同じストレージ ユニットが使用されていることを示します
プログラムの実行結果:
コードは次のとおりです:
100
100
101
101
多くの人は、php の参照が C のポインターと同じであると誤解しています。実際には、それらは異なり、大きく異なります。配列転送プロセス中に明示的に宣言する必要のない C 言語のポインターを除き、他のポイントは * を使用して定義する必要があります。ただし、PHP のアドレスへのポインター (ポインターと同様) 関数は、はい、PHP の参照は「コピーオンライト」の原則を採用しています。つまり、書き込み操作が発生しない限り、同じアドレスを指す変数やオブジェクトはコピーされません。 。
php のデフォルトは値渡しです:
コードをコピーします コードは次のとおりです:
$b = $a;
$a = $a; + 10;
echo $a.' と '.$b;
コードをコピーします
コードは次のとおりです:
アドレスに変更したい場合は、& を追加する必要があります。
コードをコピーします
コードは次のとおりです:
$a = 20; b = &$a;
$a = $a + 10; プログラムの実行結果:
コードは次のとおりです
30 と 30
つまり、& は $a のアドレスを $b に渡します。この場合、2 つの変数はメモリ記憶域を共有します。これは、それらの値が同じであることを意味します。
同じ構文は、参照を返す関数と new 演算子で使用できます:
コードをコピー コードは次のとおりです:
$bar =& new fooclass( ) ;
$foo =& find_var($bar);
参照が行う 2 番目のことは、変数を参照によって渡すことです。これは、呼び出しスコープ内の同じコンテンツを参照する関数内にローカル変数を作成することによって実現されます。簡単に言うと、関数のパラメータはローカル変数への参照です。別の例を挙げてみましょう:
コードをコピーします コードは次のとおりです:
function foo(&$val1, $val2) {
$val1 += 1;
$val2 + = 1;
$b=10;
echo $b;
関数には 2 つの値があります。1 つは $a の内容への参照、もう 1 つは $b の値です。この関数を実行すると、$a の内容が変更されたことがわかります。ただし、$b の内容は変更されていません。 PHP 参照の 3 番目の使用法は、参照リターンです。この使用法は、関数を使用して参照をバインドする必要がある場合に使用されます。参照を返すときは、次の構文を使用します。 簡単に言うと、これはやはり参照関数の戻りです。ただし、パラメーターの受け渡しとは異なり、& 記号は関数定義と関数参照の両方で使用する必要があります。例を示します:
コードをコピーします
コードは次のとおりです:
function &find_var ($param)
{
/* ...code... */
return $found_var;
$foo =& find_var ($bar);
$foo-> ;x = 2;
?>
この例では、$foo への代入は関数 find_var の戻り参照であるため、$foo-> に値を代入する場合、
PHP 参照の最後の使用法は、参照の配置です。主な用途は 2 つあります。1 つは、グローバル $var で変数を宣言する場合、グローバル変数への参照が実際に確立されることです。つまり、$var =& $GLOBALS["var"]; と同じです。もう 1 つは、オブジェクトのメソッド内での $this の使用法です。$this は常に、それを呼び出すオブジェクトへの参照になります。
http://www.bkjia.com/PHPjc/328163.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/328163.html技術記事 PHP 参照について (つまり、変数、関数、オブジェクトなどの前に lt;?php を追加します。 //変数 a を宣言 $b = //変数 b を宣言、独立変数 a を参照 echo "$a br /" ; エコー "$b br /";...