2

PHP でオブジェクト参照を読みました。オブジェクト参照を使っていくつかの実験を行いました。

私の疑問は次のとおりです。

オブジェクトを別の変数に割り当てました。次に、変数の値を変更して変数を出力しました。両方の変数が影響を受けました。オブジェクト参照を別の変数に割り当てました。次に、一方の変数の値を変更し、両方に影響を与えました。

 <?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";

 ?>

私の質問は:

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

どちらも同じですか、それとも違いはありますか?

4

2 に答える 2

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;

最初の例 (代入) では、$bisNULLです。2 番目の例で$bは、変数エイリアス (別名 PHP 変数参照) です。

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

ご覧のとおり、オブジェクトに関係なく、割り当てを行うことは、変数参照を作成することと同じではありません。

これがあなたにとってこれを少し明確にすることを願っています。参照について話すのではなく、変数のエイリアシングについて話してください。これは、PHP の世界でよりよく一致します。

于 2012-04-30T16:44:14.493 に答える
1

これはマニュアルで詳しく説明されていますが、もう一度説明します。

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

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

于 2012-04-28T07:46:17.953 に答える