2012-04-28 7 views
2

PHPでオブジェクト参照を読みました。オブジェクト参照でいくつかの実験を行いました。オブジェクトの割り当てとオブジェクト参照の割り当ての違いは何ですか?

私の疑いがある:

私は変数の値を変更しvariable.Theに両方の変数を印刷affected.Iが別variable.Then Iへのオブジェクト参照を割り当てられ得る、別のvariable.Thenにオブジェクトを割り当てます1つの変数の値が変更されました。両方の変数に影響します。

<?php 

##Class 
class A 
{ 
    var $foo = 1; 
} 

#Assignment 
$a = new A(); 
$b = $a; 

echo "Assignment:\n"; 
$b->foo = 8; 
echo $a->foo."\n"; 
echo $b->foo."\n"; 

#Reference 
$c = new A(); 
$d =& $c; 

echo "References:\n"; 
$d->foo = 4; 
echo $c->foo."\n"; 
echo $d->foo."\n"; 

?> 

私の質問は:

オブジェクトを割り当て、オブジェクト参照を割り当てることの違いは何ですか。

どちらも同じかどうか、違いはありますか?

答えて

3

は、あなたが存在しないものと比較することはできませんので、

PHPはオブジェクト参照を持っていないオブジェクト参照をオブジェクトを割り当て、割り当ての違いは何ですか。 (オブジェクト識別子である)オブジェクトの割り当てがある

$a = new Foo; 
$b = $a; 

$a = new Foo; 
$b = &$a; 

最初の1、2番目は次のとおりです。

は、しかし、私はあなたが違いを知りたいと仮定します$bの別名は$aとなります。我々は、フローを少し変更した場合の差が明らかになるはずである:最初の例(割当)で

$a = NULL; 
$b = $a; 
$a = new Foo; 

$a = NULL; 
$b = &$a; 
$a = new Foo; 

$bNULLあります。 2番目の例では、$bは可変エイリアス(a.k.a. PHP変数参照)です。

実行後、最初の例の$bは当然NULLですが、2番目の例では$aです。

オブジェクトから独立してわかるように、割り当てを行うことは可変参照の作成と同じではありません。

これが少しわかりやすいと思います。参照については言及しないでください。可変エイリアシングについて話してください。それはPHPの世界でより良く一致します。

+0

素敵な答えをありがとう.. – sat

1

これを詳細in the manualに説明するが、私は再びそれを説明します:

PHPはオブジェクトを作成するとき、それはそのオブジェクトへのアクセスを可能にする変数オブジェクト識別子を、割り当てられます。引数としてオブジェクトを渡すか、変数に代入するときは、実際に変数にその識別子のコピーを渡します。

ほとんどすべてのテストケースと状況では、どちらも同じです。

+0

「ほぼ」とはどういう意味ですか?それとも、彼らは同じ種類の参照ではありませんか? – Christian

+0

私が理解している限り、それは同じではありません。違いが何であるかは分かりません。私が作ったすべてのテストが同じように機能するためです。 –

+0

'mkay ... just askin' ... – Christian

関連する問題