【发布时间】:2021-01-30 02:11:10
【问题描述】:
在我的项目中,我有一个对象 Absence,它有很多属性,包括“dateDebut”属性。
在一个函数中,我处理这个对象以获取一些信息。在这个函数中,我碰巧必须像这样在 dateTime 中添加一天
$processAbsence->setDateDebut($processAbsence->getDateDebut()->modify('+1 day'));
我的目标显然不是修改初始对象。这就是我之前克隆对象的原因:
public function getNotWorkingDays(Absence $absence)
{
//$absence is my original object. I clone it to not apply some modifications on it.
$processAbsence = (clone $absence)
while($this->canAbsenceProgress($processAbsence))
{
$processAbsence = $this->doAbsenceProgress($processAbsence);
}
//...
}
private function doAbsenceProgress(Absence $absence)
{
// Here too, I cloned the previous cloned object, I make some modifications on it and return it
$processAbsence = (clone $absence);
if ('matin' == $processAbsence->getMomentDebut()) {
$processAbsence->setMomentDebut('après-midi');
} else {
$processAbsence->setDateDebut($processAbsence->getDateDebut()->modify('+1 day'));
$processAbsence->setMomentDebut('matin');
}
return $processAbsence;
}
但是当我转储我的 $absence 对象时,我可以看到 $absence->getDateDebut() 已更改,就像克隆的对象应该是...
我不明白为什么
【问题讨论】: