【PHP】DateTimeクラス・DateTimeImmutableクラスのオブジェクトの違い

PHPでは、日付・時刻を表すことができるDateTimeクラス、DateTimeImmutableクラスがあります。

DateTimeImmutableクラスはDateTimeクラスとほぼ同じですが、 DateTimeImmutableクラスでは、作成したオブジェクトをメソッドで扱う際に、元のオブジェクトは変更せずに新しいオブジェクトを返します。

今回は、そのDateTimeクラス・DateTimeImmutableクラスで作成したオブジェクトの違いについてのまとめとなります。

DateTime・DateTimeImmutableのオブジェクトの違い

以下は、DateTimeクラス、DateTimeImmutableクラスから作成した、それぞれのオブジェクト対して、メソッドで変更を加えた際の出力結果の違いとなります。

例では、それぞれのオブジェクトに対して、2回、modifyメソッドを使い1日加算して出力します。そして、最後に元のオブジェクトを出力しています。

DateTimeクラスのオブジェクトにメソッドで変更を加えた例

$date = new DateTime('2001/01/01');
echo $date->modify('+1 day')->format('Y年m月d日') .'<br>';
echo $date->modify('+1 day')->format('Y年m月d日') .'<br>';
echo $date->format('Y年m月d日') .'<br>';

出力結果

2001年01月02日
2001年01月03日
2001年01月03日

上記例のように、DateTimeクラスのオブジェクトにメソッドで変更を加えると、元のオブジェクトを変更して返します。

DateTimeImmutableクラスのオブジェクトにメソッドで変更を加えた例

$date = new DateTimeImmutable('2001/01/01');
echo $date->modify('+1 day')->format('Y年m月d日') .'<br>';
echo $date->modify('+1 day')->format('Y年m月d日') .'<br>';
echo $date->format('Y年m月d日') .'<br>';

出力結果

2001年01月02日
2001年01月02日
2001年01月01日

上記例のように、DateTimeImmutableクラスのオブジェクトにメソッドで変更を加えても、毎回、新しいオブジェクトを返すため、最後に出力した元のオブジェクトは変更されません。

参考サイトなど

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。