Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-为什么用克隆的对象datetime属性更新对象datetime属性?_Php_Datetime_Clone - Fatal编程技术网

PHP-为什么用克隆的对象datetime属性更新对象datetime属性?

PHP-为什么用克隆的对象datetime属性更新对象datetime属性?,php,datetime,clone,Php,Datetime,Clone,在我的项目中,我有一个对象缺失,它有很多属性,包括“DateFirst”属性 在函数中,我处理这个对象以获得一些信息。在这个函数中,我恰好需要像这样在dateTime中加上一天 $processidence->setDateFirst($processidence->getDateFirst()->修改(“+1天”) 我的目标显然不是修改初始对象。这就是我以前克隆对象的原因: 公共函数getNotWorkingDays(缺勤$缺勤) { //$缺勤是我的原始对象。我将其克隆以不对其应用某些修改。

在我的项目中,我有一个对象缺失,它有很多属性,包括“DateFirst”属性

在函数中,我处理这个对象以获得一些信息。在这个函数中,我恰好需要像这样在dateTime中加上一天

$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;
    }
}