如何从foreach循环中的对象获取属性值?

时间:2016-01-19 22:08:38

标签: php date foreach

我遍历一个包含两个“旺季”的数组(使用一个foreach循环)。对象 - 这两个对象具有id,开始日期和结束日期。我通过getter得到了旺季的开始日期并将其分配给一个变量,当我循环通过旺季开始日期和结束日期的日期差异时,意图增加月份。当我循环显示日期差异时,将预订开始日期和结束日期与我按月增加的变量进行比较,然后变量"包含"日期增加一个月。

此变量是否包含对数组的高级对象的开始日期属性的引用?当我转储高季节数组时,开始日期已更改为与已增加一个月的变量相同的日期。如何获取旺季开始日期属性的值而不是数组对象的开始日期的引用?

我使用的是PHP 5.5.30。

foreach ($highseasons as $highseason) {
    $HSDate = $highseason->getStartDate();
    $diff = date_diff($highseason->getStartDate(), $highseason->getEndDate());

    $months = (int)$diff->format('%m');
    $SDBool = false;
    $EDBool = false;

    // loop through the date difference
    for ($i = 0; $i <= $months; $i++) {
        var_dump($highseasons);
        $HSMonth = $HSDate->format('m');
        $BookingStartingMonth = $value->getStartDate()->format('m');
        $BookingEndingMonth = $value->getEndDate()->format('m');

        if ($HSMonth == $BookingStartingMonth) {
            $SDBool = true;
        }

        if ($HSMonth == $BookingEndingMonth) {
            $EDBool = true;
        }

        // add one month onto the high season date
        $HSDate->add(new DateInterval('P1M'));
    }
}

1 个答案:

答案 0 :(得分:1)

由于开始日期是DateTime对象,因此它是一个引用,修改它也会改变高阶季节开始日期的值(因为它们是同一个对象)。

为了满足您的要求,您需要clone DateTime对象:

$tempDate = clone $HSDate;

并改为增加新的日期对象。