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

标签 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";

 ?>

我的问题是:

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

两者相同还是有区别?

最佳答案

What is the difference between assigning an object and assigning an object reference

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 世界。

关于php - 分配对象和分配对象引用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361561/

相关文章:

php - Phalcon - 如果不存在则模块异常

php - PDO fetchAll 不返回所有行

oop - 对象作为 lisp 中自身的参数

javascript - 返回 Javascript 构造函数的属性

javascript - 查找对象数组中的特定元素并将其添加

PHP 从不带键/值对的 URL 查询字符串中获取值

php - MySQL 到 Oracle 帮助

objective-c - 为 C 程序员学习 OO

Java接口(interface)查询

javascript - 嵌套数组对象与另一个元素数组进行比较并使用 Javascript 或 ES6 创建新数组