我是面向对象开发的新手,我正在创建一个面向对象程序的应用程序,请你提供一些关于如何正常使用PHP的克隆方法的例子,首选实际例子。
我想更全面地了解相关概念。
谢谢,
答案 0 :(得分:14)
这是我前几天需要克隆一个对象的例子。我需要有两个DateTime对象,from date
和to 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
将保持不变。