ホームページ >バックエンド開発 >PHPの問題 >PHPでの値の受け渡しは何を意味しますか

PHPでの値の受け渡しは何を意味しますか

青灯夜游
青灯夜游オリジナル
2023-01-28 18:41:093643ブラウズ

PHP では、値の受け渡しとは、関数呼び出し時に実パラメータをコピーして、関数の仮パラメータに渡すことを指しますが、実際には、仮パラメータと実パラメータはそれぞれ異なる記憶域を占有します。値の転送の特徴は一方向の転送、つまり、呼び出し元の関数が呼び出されたときに、記憶装置が仮パラメータに割り当てられ、実パラメータの値が仮パラメータに渡されることです。 、仮パラメータの記憶ユニットは解放され、仮パラメータの値は になります。いかなる変更も実パラメータの値には影響せず、実パラメータの記憶ユニットはその値を変更せずに保持および維持します。

PHPでの値の受け渡しは何を意味しますか

#このチュートリアルの動作環境: Windows7 システム、PHP8 バージョン、DELL G3 コンピューター

関数を呼び出すときはパラメーターを渡す必要があります関数に渡されるパラメータは実パラメータと呼ばれ、関数によって定義されたパラメータは仮パラメータと呼ばれます。関数にパラメータを渡すには、値渡し、参照渡し、デフォルト パラメータ、および可変長パラメータの 4 つの方法があります。

値の受け渡し

値の受け渡しは、PHP の関数のデフォルトの値の受け渡し方法であり、「値によるコピー受け渡し」とも呼ばれます。名前が示すように、値を渡すメソッドは実パラメータの値をコピーして関数の仮パラメータに渡すため、関数内でパラメータの値を操作しても、関数の外の実パラメータには影響しません。したがって、関数で実際のパラメータの値を変更したくない場合は、値で渡すことができます。

値転送の特徴は一方向の転送です。つまり、呼び出し元の関数が呼び出されると、記憶装置が仮パラメータに割り当てられ、実パラメータの値が転送されます。仮パラメータ 呼び出しが完了すると、仮パラメータが保存されます ユニットは解放され、仮パラメータ値の変更は実パラメータの値に影響を与えません 実パラメータの記憶装置は依然として保持し、維持します値は変更されません。

[例] 以下のような簡単な関数を定義します この関数には 2 つのパラメータがあり、関数内でパラメータの値が交換されます。

<?php
    function swap($a, $b){
        echo &#39;函数内,交换前 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo &#39;函数内,交换后 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
    }
    $x = 5;
    $y = 7;
    echo &#39;函数外,交换前 $x = &#39;.$x.&#39;, $y = &#39;.$y.&#39;<br>&#39;;
    swap($x, $y);
    echo &#39;函数外,交换后 $x = &#39;.$x.&#39;, $y = &#39;.$y;
?>

実行結果は次のとおりです。

PHPでの値の受け渡しは何を意味しますか

#実行結果から、関数内の値は次のとおりであることがわかります。確かに交換されていますが、関数の外では値が変化しないわけではありません。したがって、関数を値で渡すことは、単に変数のコピーを渡すことであると言えます。したがって、関数が関数の外部パラメーターを操作できるようにしたい場合は、参照渡しを使用する必要があります。

参照渡し

参照渡しとは、実パラメータのメモリアドレスをコピーして、それを仮パラメータに渡すことです。パラメータと仮パラメータはどちらも同じメモリ アドレスを指しているため、仮パラメータに対する関数の操作は関数の外部にある実際のパラメータに影響を与えます。

参照渡しとは、実パラメータのメモリアドレスを関数の仮パラメータに渡すことです。したがって、実パラメータと仮パラメータは同じメモリ アドレスを指します。このとき、関数内のすべての操作は関数の外の実パラメータの値に影響を与えます。参照渡しの方法は、以下のように値の受け渡しをベースに&記号を追加する方法です。

function name (&参数1, &参数2, ..., &参数3) {
    ...    
}

【例】 上記例のコードを少し修正して、参照渡しの方法を使用します。 swap 関数に渡します。パラメータ、コードは次のとおりです:

<?php
    function swap(&$a, &$b){
        echo &#39;函数内,交换前 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo &#39;函数内,交换后 $a = &#39;.$a.&#39;, $b = &#39;.$b.&#39;<br>&#39;;
    }
    $x = 5;
    $y = 7;
    echo &#39;函数外,交换前 $x = &#39;.$x.&#39;, $y = &#39;.$y.&#39;<br>&#39;;
    swap($x, $y);
    echo &#39;函数外,交换后 $x = &#39;.$x.&#39;, $y = &#39;.$y;
?>

実行結果は次のとおりです:

PHPでの値の受け渡しは何を意味しますか

php の値の受け渡しと参照の受け渡しの違い

値の転送: 関数のスコープ内で変数の値を変更しても、関数の外の変数の値には影響しません。

参照による受け渡し: メモリ アドレスは参照によって渡されるため、関数のスコープ内では、値への変更は関数の外側にも反映されます。

2 つのコードを入力すると、2 つの違いがわかります。現象から本質を見てみましょう

function sum($a){
  $a++;
  $b = $a;
  return $b;
}
$a = 10;
echo sum($a).&#39;<br />&#39;;//11
echo $a;//10
function sum(&$a){
  $a++;
  $b = $a;
  return $b;
}
$a = 10;
echo sum($a).&#39;<br />&#39;;//11
echo $a;//11

2 つのコードの違いは、コードのパラメーターにあります。 sum 関数。1 つは値 $ a を渡す方法、もう 1 つは参照 &$a を渡す方法です。結果として、値を渡しても $a の値は変化しません。逆に、$a の値は値を渡しても変化しません。リファレンスを渡します。ここで C 言語を学習した子供なら理解できると思いますが、スタックにプッシュされるのはリファレンスのコピーです。

参照は特定の変数を指しているため、参照に対する操作は実際には参照が指している変数に対する操作になります。 (この関数は、逆参照する必要がないことを除いて、ポインタを渡すのと同じです。) & は、変数のアドレスを指すシンボルです。関数 sum の仮パラメータ &$a は、実際には実パラメータ $a です。その後、実際のパラメータ $a の値が実際に変更されるだけです。

説明:

値渡しでは、元のパラメータの値は他の関数を呼び出した後も元の値のままですが、参照渡しでは元の値が変更されます。値渡しの方法で値を渡す場合、元の値を変更する必要がある場合はコードをコピーする必要があり、値が十分に大きかったり、大きな文字列だったりするとコードがどんどん増えてしまいます。反復的ですが、参照渡しは PHP コードをコピーする必要がないため、パフォーマンスの向上に大きな利点があります。

PHP 関連の知識について詳しくは、

php中文网 をご覧ください。

以上がPHPでの値の受け渡しは何を意味しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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