每次都创建新的日期时间对象


Create new datetime object each time

我使用一个datetime对象$date_objdate_format创建了不同的变量。

$date_obj = date_create($date);
$year = date_format($date_obj, 'Y');
$month = date_format($date_obj, 'm');
$day = date_format($date_obj, 'd');

但是我已经阅读(丢失来源)这是不好的做法?相反,我应该每次创建一个新的datetime对象,因为原始对象不是引用的,而是直接操作的。

$date_obj_1 = date_create($date);
$year = date_format($date_obj_1, 'Y');
$date_obj_2 = date_create($date);
$month = date_format($date_obj_2, 'm');
$date_obj_3 = date_create($date);
$day = date_format($date_obj_3, 'd');

这是真的吗?

DateTime 对象是一个对象,因此通过引用传递。

在上面的示例中,这无关紧要,因为您只设置日期的格式,不会对其进行操作。但是,如果您使用 DateTime 对象作为函数中的参数,并且在此函数中操作该对象,则您的更改将在该函数外部可见:

function addDays($date,$days){
        $date->add(new DateInterval($days.' days'));
}
$date_obj_1 = date_create($date);
$formatedDate1 = date_format($date_obj_1, 'Y-m-d');
addDays($date_obj_1,10);
$formatedDate2 = date_format($date_obj_1, 'Y-m-d');

在上面的示例中,$formatedDate 1 与 $formatedDate 1 不同,因为 $date_obj_1 是通过引用传递


编辑:有关我上面截图的详细说明,请查看评论部分。 @Xatoo解释得很好。

date_format没有操作 DateTime 对象。您所做的相当于:

$dateObject = new DateTime($date);
$year = $dateObject->format('Y');
$month = $dateObject->format('m');
$day = $dateObject->format('d');

这绝对没问题,dateObject不会通过对其调用格式方法来更改。