我使用date_format
对象datetime
中的$date_obj
创建了不同的变种。
$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');
这是真的吗?
答案 0 :(得分:1)
date_format
不会操纵DateTime对象。你做的是相当于:
$dateObject = new DateTime($date);
$year = $dateObject->format('Y');
$month = $dateObject->format('m');
$day = $dateObject->format('d');
这绝对没问题,通过调用格式方法不会更改dateObject
。
答案 1 :(得分:1)
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');
在上面的例子中,$ formatedDate1与$ formatedDate1不同,因为$ date_obj_1是通过引用传递的
编辑:有关我上面剪辑的评论部分的详细说明。 @Xatoo解释得非常好。