我使用一个datetime
对象$date_obj
的date_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
不会通过对其调用格式方法来更改。