【问题标题】:Clone PHP example usages [duplicate]克隆 PHP 示例用法 [重复]
【发布时间】:2011-10-19 03:50:34
【问题描述】:

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

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

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

谢谢,

【问题讨论】:

  • 文档从几个例子开始:php.net/manual/en/language.oop5.cloning.php 有没有你不完全理解的地方?
  • 不是说我看不懂手册上说的什么,而是我的实际水平没有发现任何问题,我想知道一些示例以在以后的实现中使用。跨度>

标签: php oop clone


【解决方案1】:

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

下面的例子做了一些简化,所以在实现中存在缺陷,如下所示,但它应该给你一个不错的想法。

问题在于 DateTime::modify 方法。假设用户提供了 from 日期,但 不是 to 日期。因此,我们将 to 日期设置为距给定 from 日期 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 中。从那里,调用 modify 将仅更改 $date_to$date_from 将保持不变。

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 2012-08-25
    • 1970-01-01
    • 2020-03-04
    • 2015-08-27
    • 2010-09-29
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多