【问题标题】:PHP For loop setting value [duplicate]PHP For循环设置值[重复]
【发布时间】: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


【解决方案1】:

正如@Nick 在他的评论中所说,使用 clone 来精确复制一个对象

$begin = new DateTime( "2015-07-03" );
$end   = new DateTime( "2015-07-09" );
$begin2 = clone $begin;
for($i = $begin; $i <= $end; $i->modify('+1 day')){
    echo $i->format("Y-m-d") . " - " . $begin2->format("Y-m-d") . "<br/>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2011-04-20
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多