Carbon:创建日期错误,更改日期影响所有变量

Carbon: error to create date , change date affect all variables

为什么要更改所有变量。

如何避免我的变量不改变它的值

在我的控制器中

public function show()
{
    $inicio = Carbon::createFromFormat('Y-m-d H:i:s',"2016-02-04 11:00:00");
    $fin = $inicio;
    $otro = $fin->addHours(1);
    return view('horas',array('inicio'=>$inicio,'otro'=>$otro,'fin'=>$fin));
}

我的看法:

<p><b>Inicio: </b> {{$inicio}}</p>
<p><b>Fin: </b> {{$fin}}</p>
<p><b>Otro: </b> {{$otro}}</p>

结果

问题出在哪里?

这是因为 Carbon 对象是可变的。

尝试克隆它们。

public function show()
{
    $inicio = Carbon::createFromFormat('Y-m-d H:i:s',"2016-02-04 11:00:00");
    $fin = clone $inicio;
    $otro = clone $inicio; // not sure why you need this
    $fin->addHours(1);
    return view('horas',array('inicio'=>$inicio,'otro'=>$otro,'fin'=>$fin));
}

当你制作$fin=$inicio;时,$fin将始终引用$inicio,这意味着如果$inicio发生变化,$fin将同时发生变化,这对象是如何工作的 这是面向对象的世界。 试试这个:

public function show()
{
    $inicio = Carbon::createFromFormat('Y-m-d H:i:s',"2016-02-04 11:00:00");
    $fin = clone $inicio;
    $otro = clone $fin->addHours(1);
    return view('horas',array('inicio'=>$inicio,'otro'=>$otro,'fin'=>$fin));
}

您应该更改为以下内容:

$fin = $inicio->copy();
$otro = $fin->copy()->addHours(1);