克隆PHP示例用法

时间:2011-08-03 14:07:49

标签: php oop clone

  

可能重复:
  what is Object Cloning in php?

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

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

谢谢,

1 个答案:

答案 0 :(得分:14)

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

以下示例已经有所简化,因此下面介绍的实现存在缺陷,但它应该给你一个不错的主意。

问题在于DateTime :: modify方法。让我们假设用户已提供 日期,但 日期。因此,我们将设置为的日期为距离 日期的 12个月。

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

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

$date_to = $date_from;
$date_to->modify('+12 months');

但是,这会导致$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');

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