-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 も編集されているのか説明してもらえますか?

4

1 に答える 1

4

PHP は、値ではなく参照によってオブジェクトをコピーします。同じオブジェクト$tempstamp = $newstamp;を指すようになりました$tempstamp$newstampこれを回避するには、次を使用する必要がありますclone

$tempstamp = clone $newstamp;

于 2013-02-19T14:46:40.380 に答える