FOR循环中的PHP DateTime导致相同的对象

时间:2014-08-12 22:13:26

标签: php datetime

$date = new DateTime();
for($i = 0; $i < 5; $i++) {
    $dates[$i] = $date;
    $date->modify('+1 day');
}
var_dump($dates);

给了我一系列相同的日期对象,比如8月16日,如果今天是8月12日。

有什么想法吗?

PS。例如,将循环中的$ date更改为$ date-&gt; getTimeStamp,它按预期工作...

1 个答案:

答案 0 :(得分:4)

那是因为modify()作用于对象本身;并且您正在构建一个包含指向 相同 对象的5个指针的数组,该对象在循环的每次迭代中都会被修改,因此它们都将指向具有的DateTime对象已修改为上次日期

$date = new DateTime();
for($i = 0; $i < 5; $i++) {
    $dates[$i] = clone $date;
    $date->modify('+1 day');
}