Carbon/Carbon
通常のCarbon
はmutable
(変更可能)なので作成したインスタンスが書き換えられてしまう。
<?php
use Carbon/Carbon;
$now = Carbon::now();
$tomorrow = $now->addDay();
echo $now->format('Y/m/d H:i:s') // "2023/02/22 12:14:00"
echo $tomorrow->format('Y/m/d H:i:s') // "2023/02/22 12:14:00"
Carbon\CarbonImmutable
CarbonImmutable
は(変更不可能)なので作成したインスタンスは値が保持される。
<?php
use Carbon/CarbonImmutable;
$now = CarbonImmutable::now();
$tomorrow = $now->addDay();
echo $now->format('Y/m/d H:i:s') // "2023/02/21 12:14:00"
echo $tomorrow->format('Y/m/d H:i:s') // "2023/02/22 12:14:00"
Carbon
クラスでもcopy()
で最初に作成したインスタンスをコピーできる。
※書き忘れなどが生じるためCarbonImmutable
推奨
<?php
use Carbon/Carbon;
$now = Carbon::now();
$tomorrow = $now->copy()->addDay();
echo $now->format('Y/m/d H:i:s') // "2023/02/21 12:14:00"
echo $tomorrow->format('Y/m/d H:i:s') // "2023/02/22 12:14:00"
結論
CarbonImmutable
を使用した方が、思わぬエラーを回避できる