-1

好的,我在这里遇到了一个奇怪的问题。我试图计算旧日期和新日期。但是我发现了一个我无法解释的问题。

设置:
我今天设置了 2 个新日期。

$tempstamp = new DateTime();
$newstamp = new DateTime();

现在,我使用以下方法将新闻戳编辑为新日期:

if ($newstamp ->format('His') > 120000) $newstamp ->modify('+7 day');
else $newstamp ->modify('+4 day');

效果很好。然而,现在奇怪的部分来了。当我在它之前和之后转储两个值时,tempstamp 会给出一个无法解释的值:

case '2':
  $tempstamp = $newstamp;

  dump($tempstamp->format('m-d')); // 02-19 - CORRECT
  dump($newstamp->format('m-d')); // 02-19 - CORRECT

  if ($newstamp->format('His') > 120000) $newstamp->modify('+7 day');
  else $newstamp->modify('+4 day');

  dump($tempstamp->format('m-d')); // 02-26 - FALSE
  dump($newstamp->format('m-d')); // 02-26 - CORRECT

*注意:转储是我们的 var_dumping 方式*

问题:
有人可以解释为什么 tempstamp 也被编辑,而我只编辑 newstamp 吗?

4

1 回答 1

4

PHP 通过引用而不是按值复制对象。现在$tempstamp = $newstamp;制作$tempstamp$newstamp指向同一个对象也是如此。为避免这种情况,您需要使用clone

$tempstamp = clone $newstamp;

于 2013-02-19T14:46:40.380 回答