ホームページ  >  記事  >  バックエンド開発  >  PHPで値を渡すこととアドレスを渡すことの違いは何ですか

PHPで値を渡すこととアドレスを渡すことの違いは何ですか

青灯夜游
青灯夜游オリジナル
2021-11-29 18:14:173222ブラウズ

違い: 値を渡すということは、元の変数の内容をコピーして新しいメモリ空間に保存することを意味します。2 つの変数は互いに独立しています。一方の変数を変更しても、もう一方の変数には影響しません。参照渡し (参照渡し) は、現在の変数にエイリアスを与えることと同じです。実際、2 つの変数は同じ値を参照し、一方の変数を変更するともう一方の変数に影響します。

PHPで値を渡すこととアドレスを渡すことの違いは何ですか

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

値の転送

値の受け渡しは、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;
?>

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

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 5, $y = 7

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

アドレス渡し(参照渡し)

パラメータの参照渡しとは、実パラメータのメモリアドレスをコピーし、仮パラメータ、実パラメータ、および実パラメータに渡すことです。仮パラメータはすべて同じメモリ アドレスを指しているため、仮パラメータに対する関数の操作は関数の外側の実パラメータに影響します。

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

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;
?>

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

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 7, $y = 5

推奨学習: "PHP ビデオ チュートリアル "

以上がPHPで値を渡すこととアドレスを渡すことの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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