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

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

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

今回は、そのDateTimeクラス・DateTimeImmutableクラスでのオブジェクトの扱いの違いについての記事となります。

DateTimeクラス・DateTimeImmutableクラスでのオブジェクトの扱いの違い

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

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

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

<?php
$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クラスのオブジェクトにメッソドで変更を加えた例

<?php
$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で返信する場合はコチラから。