2012-01-17 10 views
6

可能性の重複:
are arrays in php passed by value or by reference?値をコピーするか参照することによってphp配列を代入しますか?

私はPHPの配列を割り当てる方法を選択できると聞いて、配列のサイズに依存します。 値を(スカラー型として)または参照によってコピーすることによって割り当てることができます。

PHPは、マニュアルに記載されているように、値をコピーすることによって常に配列に変数を割り当てます。

または、参照によって割り当てることができます。 ?

<?php $a = array(1,2,3); ?> 
+0

あなたはちょうどそれがで配列を割り当てることは可能ですかどうかを知りたいと思っています参照?あるいは、自動的にそれを設定する方法があるかどうか知りたいですか? – jprofitt

+0

私は、時にはPHpエンジンが$ a = array(1,2,3)を渡すことができることを知りたいと思います。 $ b = $ a; '&'記号なしで参照してください。 – RusAlex

答えて

12

すでに存在するものを参照していない限り、参照によって何かを割り当てることはできません。同様に、存在しないものはコピーできません。

ので、このコード:

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

...コピーまたは参照でもない - それはちょうど値は文字通り、指定されたため、新しい配列は、値でそれを埋め作成されます。しかしながら

、このコード:

$x = 1; 
$y = 2; 
$z = 3; 
$a = array($x,$y,$z); 

... $x$y$zからコピーした値を配列に。配列値を初期化するために使用される変数は、依然としてそれ自体で存在し、配列内の値に影響を与えずに変更または破棄することができます。

このコード:

$x = 1; 
$y = 2; 
$z = 3; 
$a = array(&$x,&$y,&$z); 

は...(&に気付く)$x$y$zへの参照の配列を作成します。このコードを実行した後に$xを変更した場合 - 私は4の値を与えます - それは配列の最初の値も変更します。したがって、配列を使用すると$a[0]には4が含まれます。

PHPでの参照の仕組みの詳細については、マニュアルのthis sectionを参照してください。アレイメンバーとして使用される変数の型と値に応じ


、コピー操作は、値による割り当てられた場合にも割り当て時に起こるかもしれません。内部的にPHPは、パフォーマンスとメモリ効率の理由から、できるだけ多くの状況でコピーオンライトを使用します。ただし、コードのコンテキストでの動作に関しては、単純なコピーとして扱うことができます。

1

はい、参照によって配列を割り当て&

$a = array(&$b, &$c, &$d); 
15

を使用する他の変数に配列変数を割り当てる際に可能である:

// By value... 
$a = array(1,2,3); 
$b = $a; 
array_push($a, 5); 
print_r($b); 

// $b is not a reference to $a 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 

// By Reference 
$a = array(1,2,3); 
$b = &$a; // Here we assign by reference 
array_push($a, 5); 
print_r($b); 

// $b is a reference to $a and gets the new value (3 => 5) 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 5 
) 
関連する問題