对象复制和评估$ b = $ a

时间:2014-01-15 18:13:00

标签: php

我的问题是$ b与输出中的$ a相同?我只是在使用($ b = $ a)并且没有复制对象时传递$ a的引用?

$a = new DateTime('2014-01-15');
$i = new DateInterval('P1D');
print $a->format('Y-m-d') . PHP_EOL;          // 2014-01-15
$b = $a;
print $a->add($i)->format('Y-m-d') . PHP_EOL; // 2014-01-16
print $b->format('Y-m-d') . PHP_EOL;          // 2014-01-16

1 个答案:

答案 0 :(得分:2)

请注意使用clone

$a = new DateTime('2014-01-15');
$i = new DateInterval('P1D');
print $a->format('Y-m-d') . PHP_EOL;          // 2014-01-15
$b = clone $a;                                // Here we clone the object
print $a->add($i)->format('Y-m-d') . PHP_EOL; // 2014-01-16
print $b->format('Y-m-d') . PHP_EOL;          // 2014-01-15

来自文档的进一步说明:if your object holds a reference to another object which it uses and when you replicate the parent object you want to create a new instance of this other object so that the replica has its own separate copy.听起来只是设置$a = $b将具有相同的对象初始化,这意味着如果一个更改另一个。变量$b成为$a中保存的初始化对象的一种符号链接。