値の転送: 関数スコープ内で変数値を変更しても、関数外の変数値には影響しません。
参照による受け渡し: メモリ アドレスは参照によって渡されるため、関数のスコープ内では、値への変更は関数の外側にも反映されます。
2 つのコードを入力すると、2 つの違いがわかります。現象から本質を見てみよう
function sum($a){ $a++; $b = $a; return $b; } $a = 10; echo sum($a).'<br />';//11 echo $a;//10
function sum(&$a){ $a++; $b = $a; return $b; } $a = 10; echo sum($a).'<br />';//11 echo $a;//11
2 つのコードの違いは、コードのパラメータにあります。 sum 関数。1 つは値 $ a を渡す方法、もう 1 つは参照 &$a を渡す方法です。結果として、値を渡しても $a の値は変化しません。逆に、$a の値は値を渡しても変化しません。リファレンスを渡します。ここで C 言語を学習した子供なら理解できると思いますが、スタックにプッシュされるのはリファレンスのコピーです。
参照は特定の変数を指しているため、参照に対する操作は実際には参照が指している変数に対する操作になります。 (この関数はポインタを渡すのと同じですが、逆参照する必要がない点が異なります) & は変数のアドレスを指すシンボルです。関数 sum の仮パラメータ &$a は、実際には実パラメータ $a です。その後、実際のパラメータ $a の値が実際に変更されるだけです。
説明:
値渡しでは、元のパラメータの値は他の関数を呼び出した後も元の値のままですが、参照渡しでは元の値が変更されます。値渡しの方法で値を渡す場合、元の値を変更する必要がある場合はコードをコピーする必要がありますが、値が十分に大きい場合や大きな文字列の場合、コードはさらに長くなります。参照渡しであるため、繰り返しが多くなりますが、PHP コードをコピーする必要がないため、パフォーマンスの向上に大きな利点があります。
PHP 関連の知識について詳しくは、php中文网 をご覧ください。
以上がPHPの値渡しと参照渡しの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。