Immutableとは
プログラミングにおいてImmutable(イミュータブル)とは「不変」という意味で、オブジェクトの状態が変わらないことを指します。
逆に、元のデータが変更可能なオブジェクトの性質をMutable(ミュータブル)と言います。
ImmutableとMutableの違い
Immutable(イミュータブル)とMutable(ミュータブル)の違いについて、実際にみていきましょう。
まずは、日付操作ライブラリ「Carbon」を使って現在日時を取得してみます。
sample.php
$now=\Carbon\Carbon::now();//2020-05-26 06:57:02.027091
現在日時が取得できました。
次に、addDayメソッドで上記で取得した現在日時に1日加算してみます。
sample.php
$tomorrow=$now->addDay();//2020-05-27 06:59:01.25073
1日加算されています。
ここで$nowの中身を再びみてみます。
sample.php
var_dump($now);//2020-05-27 06:59:01.25073
なんと、\$nowまで1日加算され、\$nowと\$tomorrowが同じ結果となってしまいました。
これは、\$nowと\$tomorrowが同じオブジェクトであるために起こります。
元の状態の変化を防ぐにはcopyメソッドを使います。
copyメソッドで元の状態を保持
copyメソッドで元のオブジェクトを複製して、2つの変数の結果を見てみましょう。
sample.php
$tomorrow=$now->copy->addDay();var_dump($now);//2020-05-26 06:57:02.027091var_dump($tomorrow);//2020-05-27 06:59:01.25073
元のオブジェクトはそのままで、$tomorrowだけ1日加算されました。
Carbonのバージョン2系では、このImmutable(イミュータブル)版が利用できるようになっています。