PHP Carbon - 相互绑定的变量
PHP Carbon - variables bound to eachother
在 Laravel 5.2 控制器中使用 PHP Carbon 时,变量似乎相互绑定。所以改变一个会影响其他;
PHP 函数:
$now = Carbon::now();
var_dump($now);
$from = $now;
$from->startOfYear();
var_dump('-----------------------------------');
var_dump($now, $from);
结果:
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)
将 $from
设置为年初也影响了 $now
,我不明白为什么,在互联网上搜索也没有任何结果。在该函数中,我将需要根据其他 Carbon 日期访问和操作 Carbon 日期,因此我不能对 Carbon 日期的每个单独实例使用 Carbon::now()
。
我该如何解决这个问题?是什么原因造成的?
更新
我无法回答为什么会发生这种情况,但我找到了一个临时解决方案,直到我弄清问题的根源。从原来的 Carbon 日期创建一个新的 Carbon 日期,转换为字符串。例如,$from = $new;
变为 $from = new Carbon($now->toDateTimeString());
。您也可以照常访问方法;
$from = (new Carbon($now->toDateTimeString()))->startOfYear();
.
当你分配一个对象时,你分配了它的内存地址,所以基本上你没有创建 2 个不同的碳对象,而是对同一个对象进行了 2 次引用。
而不是这个 -
$from = $now;
使用 -
$from = clone $now;
您还可以使用 carbon copy()
方法,该方法基本上与您在 'hack' -
中所做的相同
$from = $now->copy();
在 Laravel 5.2 控制器中使用 PHP Carbon 时,变量似乎相互绑定。所以改变一个会影响其他;
PHP 函数:
$now = Carbon::now();
var_dump($now);
$from = $now;
$from->startOfYear();
var_dump('-----------------------------------');
var_dump($now, $from);
结果:
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)
将 $from
设置为年初也影响了 $now
,我不明白为什么,在互联网上搜索也没有任何结果。在该函数中,我将需要根据其他 Carbon 日期访问和操作 Carbon 日期,因此我不能对 Carbon 日期的每个单独实例使用 Carbon::now()
。
我该如何解决这个问题?是什么原因造成的?
更新
我无法回答为什么会发生这种情况,但我找到了一个临时解决方案,直到我弄清问题的根源。从原来的 Carbon 日期创建一个新的 Carbon 日期,转换为字符串。例如,$from = $new;
变为 $from = new Carbon($now->toDateTimeString());
。您也可以照常访问方法;
$from = (new Carbon($now->toDateTimeString()))->startOfYear();
.
当你分配一个对象时,你分配了它的内存地址,所以基本上你没有创建 2 个不同的碳对象,而是对同一个对象进行了 2 次引用。
而不是这个 -
$from = $now;
使用 -
$from = clone $now;
您还可以使用 carbon copy()
方法,该方法基本上与您在 'hack' -
$from = $now->copy();