php - 对象分配在 PHP OOP 中没有意义

标签 php oop variable-assignment

我经过测试,结果是错误的,但这没有意义:

class myClass
{
  public $x;

  function myMethod()
  {
    echo $this->x;
  }
}

$a = new myClass();
$a->x = 10;
$b = $a;
$b->x = 20;
$c = clone $b;
$c->x = 30;

$a->myMethod();
$b->myMethod();
$c->myMethod();

我的直觉是102030,但结果实际上是202030!!! 10号怎么了?!?! $a 的变量不应该被保留吗?我认为所有对象都是独立的,除非它具有由与号(=&)设置的直接引用,否则不会更新?

最佳答案

$b = $a;中,仅复制对象引用,而不复制对象。

但是,当您使用 clone 时,对象确实被复制,因此 $c = clone $b, 创建了一个新对象(由 引用) $c)和一个新的引用($c)。

$b =& $a;中,符号$a$b都指向同一个引用,即甚至连引用也不会被复制(因此,对 $b 的赋值,比如说,一个整数,也会影响 $a 的值)。

总而言之,这里有两个间接:从符号到 "zval" (在对象引用的情况下)以及从对象引用到对象本身(即存储实际对象状态的内存部分)。

关于php - 对象分配在 PHP OOP 中没有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7548990/

相关文章:

php - 为每个查询创建新连接?

php - 尝试使用 PDO 语句将结果显示在表上

php - Eloquent groupBy 在 Laravel 5.3 中使用有效的 SQL 查询生成 "SQLSTATE[42000]"

php - 友好网址中的西里尔字符问题

design-patterns - 工厂对象的目的/使用相同实例返回类型的好处

Javascript 分配问题

javascript - 这在 JavaScript 中意味着什么?

ios - 将参数传递给自定义 UITableViewCell

java - 需要创建一个只能从 G 实例化的 A 类

comparison - 比较还是分配比较昂贵?