PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのPassByReferenceおよびPassByValueとは何ですか?


この記事では、PHPでの値渡しと参照渡しについて学習します。

それでは、これら2つの概念を詳しく理解しましょう。

PHPでは一般的に、値渡しアプローチを使用して関数に引数を渡します。関数内の引数の値が変更されても、関数外では変更されないため、この方法に従っています。

場合によっては、関数の引数を変更する必要があります。そのため、関数が引数を変更できるようにするには、参照で渡す必要があります。

参照によって渡されることから始めましょう。すでに述べたように、関数を参照して変数を渡すことができるので、関数は変数を変更できます。参照によって渡されたパラメーターを渡すプロセスを開始するには、関数定義の引数名の前にアンパサンド(&)を追加します。

簡単な例でこれをテストしてみましょう。

<?php
   function calculate(&$a){
      $a++;
   }
   $a=5;
   calculate($a);
   echo $a;
?>

出力

6

説明

ここでは、変数$ aを宣言し、関数calculate()への参照によってそれをpassとして渡しました。したがって、原則として、$ aの値が関数内で変更されると、関数外でも変更されます。

関数呼び出しには参照記号はなく、関数定義のみにあります。関数定義だけで、参照によって引数を正しく渡すことができます。これは、calculate(&$ a);に使用する場合、PHPの5.4バージョンでは非推奨になりました。エラーが発生します。

値渡しを理解するために例をテストしてみましょう。

<?php
   function calculate($a){
      $a++;
   echo $a."<br/>";
   }
   $a=5;
   calculate($a);
   echo $a;
?>

出力

6
5

説明

ここでは、値を渡し値として関数calculate()に渡しました。その値は関数内で変更されますが、関数外には反映されません。変数の値は、関数の外では同じままです。


  1. C#の値渡しと参照パラメーターの違いは何ですか?

    参照パラメータ 参照パラメータは、変数のメモリ位置への参照です。参照パラメータは、メソッドに提供される実際のパラメータと同じメモリ位置を表します。 値パラメーターとは異なり、参照によってパラメーターを渡す場合、これらのパラメーターの新しい保管場所は作成されません。 値渡し これは、パラメータをメソッドに渡すためのデフォルトのメカニズムです。このメカニズムでは、メソッドが呼び出されると、値パラメーターごとに新しい保存場所が作成されます。 実際のパラメータの値がそれらにコピーされます。したがって、メソッド内のパラメーターに加えられた変更は、引数に影響を与えません。

  2. Pythonでの参照と値の受け渡し

    Python言語のすべてのパラメーター(引数)は、参照によって渡されます。これは、関数内でパラメーターが参照するものを変更すると、その変更が呼び出し元の関数にも反映されることを意味します。 例 #!/usr/bin/python # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist.append([1,2,3,4]); print "Values inside the function: ",