【发布时间】:2019-12-31 23:33:34
【问题描述】:
我对这个有点困惑:-S
我试图在 2 个日期之间的每一天循环,所以有以下代码(为调试而简化):-
<?php
$begin = new DateTime( "2015-07-03" );
$end = new DateTime( "2015-07-09" );
for($i = $begin; $i <= $end; $i->modify('+1 day')){
echo $i->format("Y-m-d") . "<br/>";
}
?>
但是我在日期上做了一些工作,但是 $begin 日期做了一些奇怪的事情,所以我在每个循环中测试了它的值:-
<?php
$begin = new DateTime( "2015-07-03" );
$end = new DateTime( "2015-07-09" );
for($i = $begin; $i <= $end; $i->modify('+1 day')){
echo $i->format("Y-m-d") . " - " . $begin->format("Y-m-d") . "<br/>";
}
?>
并且$begin的值变成了$i,所以输出是:-
2015-07-03 - 2015-07-03
2015-07-04 - 2015-07-04
2015-07-05 - 2015-07-05
2015-07-06 - 2015-07-06
2015-07-07 - 2015-07-07
2015-07-08 - 2015-07-08
2015-07-09 - 2015-07-09
我尝试将 $begin 设置为 $being2:-
<?php
$begin = new DateTime( "2015-07-03" );
$end = new DateTime( "2015-07-09" );
$begin2 = $being;
for($i = $begin; $i <= $end; $i->modify('+1 day')){
echo $i->format("Y-m-d") . " - " . $begin2->format("Y-m-d") . "<br/>";
}
?>
但是 $begin2 仍然递增,即使我没有在 for 循环中触及它。
谁能向我解释为什么会这样,以及如何在我的 for 循环中访问 $begin :-S
【问题讨论】:
-
将一个对象分配给另一个变量只是传递一个指针,因此在您的示例中,
$i、$begin和$begin2都指向同一个对象。如果你想要一个对象的副本,请使用clone -
使用
clone+ DateTimeImmutable 来避免额外的意外。
标签: php