1. ホーム
  2. php

[解決済み】PHPの配列は、値としてコピーされますか、それとも新しい変数への参照としてコピーされますか、そして関数に渡されたとき?

2022-04-01 01:46:49

質問

1) 配列をメソッドや関数の引数として渡す場合、参照渡しでしょうか、それとも値渡しでしょうか。

2) 配列を変数に代入するとき、新しい変数は元の配列への参照なのか、それとも新しいコピーなのでしょうか?

こうするとどうでしょう。

$a = array(1,2,3);
$b = $a;

$b への参照です。 $a ?

解決方法は?

ご質問の後半部分については マニュアルの配列のページ には、次のように書かれています。 (引用) :

配列の代入には常に値が含まれます。 コピーすることができます。参照演算子を使って 配列を参照でコピーします。

そして、与えられた例.

<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
             // $arr1 is still array(2, 3)

$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>



最初の部分については、試してみるのが一番です;-)

次のようなコード例を考えてみましょう。

function my_func($a) {
    $a[] = 30;
}

$arr = array(10, 20);
my_func($arr);
var_dump($arr);

このように出力されます。

array
  0 => int 10
  1 => int 20

これは、関数がパラメータとして渡された配列の "outside" を変更していないことを示します:これはコピーとして渡され、参照ではありません。

もし、参照渡しにしたい場合は、このように関数を修正する必要があります。

function my_func(& $a) {
    $a[] = 30;
}

そして、出力は次のようになります。

array
  0 => int 10
  1 => int 20
  2 => int 30

今回は、配列が参照渡しされているので、quot;by reference"です。



を迷わず読んでください。 リファレンスの説明 のセクションを読んでみてください: いくつかの質問に答えてくれるはずです。)