はじめに
何度か php の carbon を利用している際に気付かずに起こしていた事象を、備忘録として記載します。
null を入れて生成
ユーザーの入力等をカーボンに変換する際は、
new Carbon($input)
Carbon::parse($input)
とすることが多いと思いますが、この$input
が空文字、null、空配列、falseなどの場合、生成されるインスタンスの日時は実行時点の日時になります。
入力をCrbonに変換してDBに登録、といった実装を注意せずに行うと、
null
等を入れて生成
↓
実行時点での日付で登録
といったコンボがエラーが起きずに発生し、後で入力していないのに日付が入っているといった事態になります。
対策
is_null()
を用いてnull
かどうかを判定するのも良いですが、空文字、空配列、false の回避も考えると、empty()
の方が広範な判定を行うことができます。
大まかな構文としては以下の通りです。
$datetime = empty($input) ? null : Carbon::parse($input);