PHP-为什么用克隆的对象datetime属性更新对象datetime属性?
在我的项目中,我有一个对象缺失,它有很多属性,包括“DateFirst”属性 在函数中,我处理这个对象以获得一些信息。在这个函数中,我恰好需要像这样在dateTime中加上一天PHP-为什么用克隆的对象datetime属性更新对象datetime属性?,php,datetime,clone,Php,Datetime,Clone,在我的项目中,我有一个对象缺失,它有很多属性,包括“DateFirst”属性 在函数中,我处理这个对象以获得一些信息。在这个函数中,我恰好需要像这样在dateTime中加上一天 $processidence->setDateFirst($processidence->getDateFirst()->修改(“+1天”) 我的目标显然不是修改初始对象。这就是我以前克隆对象的原因: 公共函数getNotWorkingDays(缺勤$缺勤) { //$缺勤是我的原始对象。我将其克隆以不对其应用某些修改。
$processidence->setDateFirst($processidence->getDateFirst()->修改(“+1天”)代码>
我的目标显然不是修改初始对象。这就是我以前克隆对象的原因:
公共函数getNotWorkingDays(缺勤$缺勤)
{
//$缺勤是我的原始对象。我将其克隆以不对其应用某些修改。
$ProcessExistence=(克隆$Existence)
while($this->canAbsenceProgress($process缺席))
{
$PROCESSEMAINCE=$this->DOABSENCEPROSS($PROCESSEMAINCE);
}
//...
}
私有函数DoAbscenceProgress(缺勤$缺勤)
{
//在这里,我也克隆了以前克隆的对象,我对它做了一些修改并返回它
$ProcessExistence=(克隆$Existence);
如果('matin'=$PROCESSEMENCE->GetMoment处女()){
$PROCESS缺席->设置时刻首秀('après-midi');
}否则{
$ProcessDescence->SetDateFirst($ProcessDescence->GetDateFirst()->修改(“+1天”);
$PROCESS缺席->设置时刻首秀('matin');
}
返回$PROCESSOUNCE;
}
但是当我转储我的$deposition
对象时,我可以看到$deposition->getDateFirst()
已经被更改,就像克隆的对象应该被更改一样
我不明白为什么
克隆对象时,PHP将执行对象所有属性的浅拷贝。任何引用其他变量的属性都将保留为引用
如文档中所示,您可能需要为缺勤类提供一个\uu clone
方法,在该方法中,您需要显式克隆引用datetime对象的属性,以便最终得到这些属性的克隆,而不是指向相同对象的指针:
class Absence
{
public $dateDebut;
function __clone()
{
// Force a copy of this->dateDebut, otherwise
// it will point to same object.
$this->dateDebut= clone $this->dateDebut;
}
}