2010-11-23 7 views
0

私は一般的なプログラミングや特に参考文献を使い慣れていません。私は配列内の個々のオブジェクトを参照で操作したいので、配列に貼り付けるオブジェクトの単なるコピーには取り組んでいません。私の質問はそれをどうやって行うのかです。PHPでの参考文献と配列

$obj0 = blah; 
$obj1 = blah; 
$obj2 = blah; 
$myArray = array($obj0, $obj1, $obj2); 

私が今アクセスし$myArray[1]変更、これは$obj1を変更すると同じになります。

は例えば、私はこれらのコード行があると?または、代わりに&$myArray[1]を変更する必要がありますか?

+0

あなたはPHP5を使用して、それらの$ objN実際のオブジェクト、または変数ですされていますか? – Orbling

+0

はい、私はPHP5を使用しています。オブジェクトとして値を変数にすることを意図していました。申し訳ありませんが混乱している/私の質問に混乱している場合。 – Mark

答えて

1

現状では、ありませんが、あなたが最初の変数を変更しません。

参照する場合は、配列を設定するときにアンパサンドを配置する必要があります。

$myArray = array(&$obj0, &$obj1, &$obj2); 

コード:

$a = "cat"; $a1 = "cat"; 
    $b = "dog"; $b1 = "dog"; 
    $arrRef = array(&$a, &$b); $arrCopy = array($a, $b); 
    $arrRef[0] .= "food"; $arrCopy[0] .= "food"; 
    $arrRef[1] .= "house"; $arrCopy[1] .= "house"; 
    echo "a: $a b: $b <br />"; 
    echo "a1: $a1 b1: $b1 <br />"; 

出力:

a: catfood b: doghouse 
a1: cat b1: dog 
+0

を参照してください。http://php.net/manual/en/function.list.php結局参照配列を作成したくないかもしれません。ここには別の方法があります –

0

PHP5では、オブジェクトはデフォルトで「参照」と呼ばれるため、$myArray[1]の前に '&'を追加する必要はありません。

+0

-1「PHP5オブジェクトは参照によって呼び出されます」というステートメントは死ぬ必要があります。私はそれが公式のPHPドキュメントにあることを知っていますが、それはまったく間違っています! PHPオブジェクトは実際には参照によって変数にバインドされています。しかし、これらの参照は他の変数と同様に '='または引数として使用するときにコピーされます。 "参照による"セマンティックが必要な場合、唯一の方法は&演算子を使用することです。 @thisMayhemの答え –

1

いいえ、$myArray[1]を変更することは、$obj1を変更することと同じではありません。ただし、両方が指すオブジェクトで操作している場合、そのオブジェクトは変更されます。言い換えれば

// Does not affect $obj1, but it does affect $obj1->foo 
$myArray[1]->foo = "bar"; 

// Does not affect $obj1, which continues to point to the same object 
$myArray[1] = null; 
関連する問題