碳:创建日期时出错,更改日期会影响所有变量

时间:2016-02-04 17:18:02

标签: php date laravel-5 php-carbon

为什么要更改所有变量。

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

在我的控制器中

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>

结果

enter image description here

问题出在哪里?

3 个答案:

答案 0 :(得分:1)

这是因为碳物体是可变的。

尝试克隆它们。

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

答案 1 :(得分:1)

制作时$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));
}

答案 2 :(得分:0)

您应该更改为以下内容:

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