克隆PHP示例用法

Leo*_*rdo 5 php oop clone

可能重复:
什么是PHP中的对象克隆?

我是面向对象开发的新手,我正在创建一个面向对象程序的应用程序,请你提供一些关于如何正常使用PHP的克隆方法的例子,现实生活中的例子首选.

我想更全面地了解相关的概念.

谢谢,

小智 14

这是一个我需要在前几天克隆一个对象的例子.我需要有两个DateTime对象,a from date和a to date.它们可以在URL参数中指定,但是可以省略任何一个,我需要将它们设置为默认值.

下面的例子已经有所简化了,所以实现中存在缺陷,如下所示,但它应该给你一个不错的主意.

问题出在DateTime :: modify方法中.让我们假设用户提供了日期,但没有一个约会.正因为如此,我们设置日期是从给定的12个月日期.

// create the from date from the URL parameters
$date_from = DateTime::createFromFormat('d/m/Y', $_GET['from']);
Run Code Online (Sandbox Code Playgroud)

DateTime类具有一种通过某种偏移来修改自身的方法.因此可以假设以下内容可行.

$date_to = $date_from;
$date_to->modify('+12 months');
Run Code Online (Sandbox Code Playgroud)

然而,这将导致两个$date_from$date_to是同一日期,即使例如出现复制的可变$date_from$date_to,它实际上是创建一个参考给它,而不是一个副本.这意味着当我们调用$date_to->modify('+12 months')它实际修改两个变量时,因为它们都指向DateTime对象的同一个实例.

这样做的正确方法是

$date_to = clone $date_from; // $date_to now contains a clone (copy) of the DateTime instance $date_from
$date_to->modify('+12 months');
Run Code Online (Sandbox Code Playgroud)

clone语句告诉PHP创建DateTime对象的新实例并将其存储$date_to.从那里,调用修改只会改变$date_to$date_from保持不变.