Php 克隆对象,有什么区别?
我们为什么要克隆对象?有什么区别?当我们克隆对象时,幕后发生了什么?可能使用低资源创建另一个对象?当您需要对象的副本时,可以克隆对象。如果只传递对对象的引用,则该对象仍然是相同的。这就是为什么您可以更改对象的属性,并使该更改在使用同一对象的任何地方都可见。克隆时,不创建引用,而是创建一个精确副本。更改副本中的属性不会更改原始属性 让我们看看下面的代码:Php 克隆对象,有什么区别?,php,Php,我们为什么要克隆对象?有什么区别?当我们克隆对象时,幕后发生了什么?可能使用低资源创建另一个对象?当您需要对象的副本时,可以克隆对象。如果只传递对对象的引用,则该对象仍然是相同的。这就是为什么您可以更改对象的属性,并使该更改在使用同一对象的任何地方都可见。克隆时,不创建引用,而是创建一个精确副本。更改副本中的属性不会更改原始属性 让我们看看下面的代码: $a = new MyClas(); $a->myProperty = 'Hello World'; $b = $a $b->my
$a = new MyClas();
$a->myProperty = 'Hello World';
$b = $a
$b->myProperty = 'See You';
echo $a->myProperty . ' / ' . $b->myProperty;
这将打印“再见/再见”
不,让我们看看这个例子
$a = new MyClas();
$a->myProperty = 'Hello World';
$b = clone $a
$b->myProperty = 'See You';
echo $a->myProperty . ' / ' . $b->myProperty;
结果将是“你好,世界/再见”相当广泛的问题 为什么? 在这种情况下,我想要一个介于两天前和两天后的日期范围:
$dateInterval = DateInterval('P2D');
$date1 = new DateTime();
$date2 = clone $date1;
$date1->sub($dateInterval);
$date2->add($dateInterval);
可以轻松获取日期范围的两端。。。。是的,我可以将$date2
实例化为newdatetime()编码>而不是克隆;但是如果我需要在克隆之前对$date1做一些额外的修改,而$date2也需要基于这些修改,那么克隆就容易多了,而且不需要重新进行额外的修改
我不能做$date2=$date1
,因为这只是对同一个对象的引用,对其中一个对象所做的任何操作都会自动对另一个对象进行,因为它是一个引用;但是克隆创建了一个副本,它本身就是一个独特的实例克隆一个对象只是复制它。幕后没有什么特别的事情发生
这样做的好处是可以自动复制所有属性。将原始对象的每个属性复制到新对象时,不必写出所有代码。如果向类中添加新属性,则不必更新手动复制属性的所有位置。。有时我克隆对象,例如,我想从SwiftMailer向不同的人发送同一封电子邮件的多个副本。或者我想获取一个DateTime
对象,然后在不修改原始DateTime
对象的情况下向其添加。很多可能性。嗯,我明白了,我走错了方向:)谢谢。很好的例子。谢谢为什么他们总是否决我?PHP文档中有一部分是关于克隆的。通常在询问之前先查看文档。因此,也许这是很好的,我现在看到了克隆的好的一面。克隆将生成原始对象的唯一版本。