我的问题是$ 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
答案 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
中保存的初始化对象的一种符号链接。