🌲
LaravelのCarbon選び
Carbon\Carbon
おなじみの日時ライブラリ。組み込みのDateTimeクラスを継承している。
mutableなので、インスタンスを直接変更するため注意が必要。
Carbon::now()->copy()->addDay()
のようにインスタンスをコピーしてから使わないとコードのあちこちで変更があった時に追うのが辛くなる。
Illuminate\Support\Carbon
Carbon\Carbon
を拡張した日時ライブラリ。実装を見ると分かる通り、Laravel8だともうsetTestNow()
しか実装がない。 (テストで日時を固定できるメソッド)
Carbon\CarbonImmutable
Carbonの immutable版。組み込みのDateTimeImmutableクラスを継承している。
こちらは新しいインスタンスが返されるため、copy()
する必要がない。
インスタンスが作られた一番最初の状態を持つので、コードを順に追う必要がなくなる。
DateTime
Carbonの元になっているPHP組み込みの日時ライブラリ。
何か特別な理由がない限りはLaravelではCarbonを使った方が楽に感じる。
DateTimeImmutable
CarbonImmutableの元になっているPHP組み込みの日時ライブラリ。
何か特別な理由がない限りはLaravelではCarbonImmutableを使った方が楽に感じる。
まとめ
出来ることならばCarbonImmutableを採用したい。
また、DateTimeを使うことで柔軟なインターフェース設計にできる。
Discussion