PHP Carbon - 彼此绑定的变量

Kie*_*ith 2 php laravel php-carbon laravel-5.2

在Laravel 5.2控制器中使用PHP Carbon时,变量似乎彼此绑定.所以改变一个会影响其他人;

PHP功能:

$now = Carbon::now();

var_dump($now);

$from = $now;
$from->startOfYear();

var_dump('-----------------------------------');
var_dump($now, $from);
Run Code Online (Sandbox Code Playgroud)

结果是:

object(Carbon\Carbon)[225]
  public 'date' => string '2016-02-13 21:55:36.000000' (length=26)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)

string '-----------------------------------' (length=35)

object(Carbon\Carbon)[225]
  public 'date' => string '2016-01-01 00:00:00.000000' (length=26)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)

object(Carbon\Carbon)[225]
  public 'date' => string '2016-01-01 00:00:00.000000' (length=26)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)
Run Code Online (Sandbox Code Playgroud)

设置$from到年初也受到影响$now,我不明白为什么,搜索互联网没有给我什么.此外,在函数中,我将需要根据其他Carbon日期访问和操作Carbon日期,因此我无法使用Carbon::now()Carbon日期的每个单独实例.

我该如何解决这个问题?是什么导致了它?

更新

我无法回答为什么会这样,但我找到了一个临时解决方案,直到我能够深入了解它.从原始Carbon日期创建一个新的Carbon日期,转换为字符串.例如,$from = $new;成为$from = new Carbon($now->toDateTimeString());.您也可以像往常一样访问方法;

$from = (new Carbon($now->toDateTimeString()))->startOfYear();.

Gal*_*Gal 9

当您指定一个对象时,您可以分配其内存地址,而不是创建2个不同的碳对象,而是对同一个对象进行2次引用.

而不是这个 -

$from = $now;

使用 -

$from = clone $now;

你也可以使用碳copy()方法,它基本上和你在'黑客'中做的一样 -

$from = $now->copy();

PHP对象克隆