【问题标题】:What is the difference between assigning an object and assigning an object reference?分配对象和分配对象引用有什么区别?
【发布时间】:2012-04-28 07:33:48
【问题描述】:

我在 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 oop object reference


    【解决方案1】:

    赋值对象和赋值对象引用有什么区别

    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 是一个变量别名(也称为 PHP 变量引用)。

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

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

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

    【讨论】:

      【解决方案2】:

      这个详细解释了in the manual,不过我再解释一遍:

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

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

      【讨论】:

      • “几乎”是什么意思?它们是,还是它们不是同一种参考?
      • 据我了解,不一样。我不确定到底有什么区别,对于我所做的每项测试,它们的功能都相同。
      • @Truth- 最后,它们是否相同?
      猜你喜欢
      • 2011-10-04
      • 2017-07-08
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      相关资源
      最近更新 更多