2013-02-19 117 views
-1

好吧,我在这里有一个奇怪的问题。我试图计算旧的日期和新的日期。但是我发现了一个我无法解释的问题。2日期时间正在编辑1

设置:
我今天有2个新日期。现在

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

,我编辑newstamp到一个新的日期期运用:

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也正在编辑,而我只编辑新邮票?

+1

因为对象是通过引用在PHP分配。在'$ tempstamp = $ newstamp'之后,两个变量都指向同一个对象。 http://php.net/manual/en/language.oop5.references.php – 2013-02-19 14:45:32

回答