分配对象和分配对象引用有什么区别?

时间:2012-04-28 07:33:49

标签: php oop object reference

我在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";

 ?>

我的问题是:

分配对象和分配对象引用有什么区别。

两者是否相同或有何不同?

2 个答案:

答案 0 :(得分:3)

  

分配对象和分配对象引用有什么区别

PHP没有对象引用,因此您无法与不存在的内容进行比较。

但是我想你想知道它们之间的区别:

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

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

第一个是对象的赋值(对象标识符),第二个是$b别名为$a。如果我们稍微改变一下流程,差异就会变得清晰:

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

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

在第一个示例(作业)中,$bNULL。在第二个示例中,$b是变量别名(a.k.a. PHP变量引用)。

执行后,第一个例子$b自然是NULL,而在第二个例子中$a就是{。}}。

如您所见,独立于对象,执行赋值与创建变量引用不同。

我希望这能为你澄清一点。不要谈论引用,只谈谈变量别名。在PHP世界中更好地匹配它。

答案 1 :(得分:1)

详细解释 in the manual ,但我会再解释一下:

当PHP创建一个对象时,它会为变量分配一个对象标识符,该标识符允许访问该对象。将对象作为参数传递或将其分配给变量时,实际上为变量提供了该标识符的副本。

对于几乎所有的测试用例和情况,它们都是相同的。