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


What is the difference between assigning an object and assigning an 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";
 ?>

我的问题是:

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

两者是否相同或有任何区别?

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

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;

在第一个示例(赋值(中,$b NULL 。在第二个示例中,$b 是一个变量别名(又名变量引用.PHP(。

执行后,ì第一个示例$b自然是NULL,而在第二个示例中

,它是$a

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

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

这在手册中有详细的解释,但我会再次解释:

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

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