2 DateTimes are getting editted by 1



好的,我这里有一个奇怪的问题。我正在计算旧日期和新日期。然而,我发现了一个我无法解释的问题。

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

$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*的方式

问题:
有人能解释为什么临时戳也被编辑,而我只编辑新闻戳吗?

PHP通过引用而不是通过值复制对象。所以$tempstamp = $newstamp;现在使$tempstamp$newstamp指向同一对象。为了避免这种情况,您需要使用clone:

$tempstamp = clone $newstamp;

相关内容

  • 没有找到相关文章

最新更新