《PHP8上級試験対策》DateTimeImmutableの正しい使い方と注意点

  • URLをコピーしました!

はじめに

PHP8の上級試験では、DateTimeDateTimeImmutable の違いを問う問題がよく出ます。
DateTimeImmutable は名前の通り「変更できない日付時刻オブジェクト」であり、add()sub() を呼んでも 元のオブジェクトは変化せず、新しいオブジェクトが返る という挙動を正確に理解する必要があります。

キーワード: DateTimeImmutable / DateTime / add / modify / immutable / mutable /

目次

DateTimeとDateTimeImmutableの違い

クラス変更可能かadd()の挙動
DateTimemutable(変更可)同じオブジェクトが更新される
DateTimeImmutableimmutable(変更不可)新しいオブジェクトが返る

💡 ポイント

  • DateTimeImmutable内部状態を変更できない
  • add() の返

コード例

<?php
declare(strict_types=1);
error_reporting(-1);

// Immutableオブジェクト生成
$dobj = new DateTimeImmutable('2025-10-11');

// add() は新しいオブジェクトを返す
$newDobj = $dobj->add(new DateInterval('P1D'));

echo $dobj->format('Y-m-d') . PHP_EOL;   // 元のオブジェクトはそのまま
echo $newDobj->format('Y-m-d') . PHP_EOL; // 1日後の日付

出力結果

2025-10-11
2025-10-12

図解イメージ(ASCIIアート)

$dobj (2025-10-11)
        |
        | add(P1D)
        v
$newDobj (2025-10-12)
  • $dobj は変更されず
  • $newDobj に1日後の日付が入る

注意点(試験対策)

  • DateTimeImmutable に対して add()modify() を呼んでも Fatal error は発生しない
  • 「Cannot modify an instance…」というエラーは 誤り
  • 常に 返り値を受け取る ことを意識する

まとめ

  • DateTimeImmutable = 変更不可(immutable)
  • add/sub/modify すると 新しいオブジェクトを返す
  • 元のオブジェクトを直接変更することはできない
  • 試験問題では、返り値を受け取るかどうかで正誤が分かれることが多い

💡 覚え方

DateTime    -> mutable
DateTimeImmutable -> "I" = Immutable

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次