【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クラスのオブジェクトにメソッドで変更を加えても、毎回、新しいオブジェクトを返すため、最後に出力した元のオブジェクトは変更されません。