PHPでは、処理日と時間は開発において非常に一般的な要件です。 PHPは、日付と時刻のオブジェクトを作成および操作するさまざまな方法を提供します。その中で、 DateTimeImmutableクラスとdate_create_immutable()関数は、2つのより重要で実用的なツールです。多くの開発者は、それらを使用するときに2つの関係を混乱させる傾向があります。この記事では、それらの接続と違いを詳細に説明し、それらをよりよく理解して使用するのに役立ちます。
DateTimeImmutableは、日付と時刻のオブジェクトを表すPHPの組み込みクラスです。 DateTimeクラスとは異なり、 DateTimeImmutableのインスタンスは、作成されると変更できません。日付と時刻を変更するすべての操作は、元のオブジェクト自体を変更する代わりに、新しいDateImmutableオブジェクトを返します。
これは明らかな利点をもたらします。オブジェクトの不変性を保証し、オブジェクトの偶発的な変更によって引き起こされるプログラムエラーを回避し、コードをより堅牢で維持しやすくします。
$date = new DateTimeImmutable('2025-05-29');
$newDate = $date->modify('+1 day');
echo $date->format('Y-m-d'); // 出力 2025-05-29
echo $newDate->format('Y-m-d'); // 出力 2025-05-30
上記のコードからわかるように、 $ dateオブジェクト自体は変更されておらず、 Modify()メソッドは新しいオブジェクトを返します。
date_create_immutable()は、PHPによって提供される関数であり、 DateTimeImMutableクラスのインスタンスを作成します。 DateTimeImmutableクラスコンストラクターの便利なカプセル化です。
関数は次のように定義されています。
function date_create_immutable(string $time = "now", ?DateTimeZone $timezone = null): DateTimeImmutable
時間文字列とタイムゾーンのパラメーターを受け入れ、 DateTimeImmutableオブジェクトを返します。
$date = date_create_immutable('2025-05-29 12:00:00');
echo get_class($date); // 出力 DateTimeImmutable
コア連絡先: date_create_immutable()関数は、実際には、新しいdateimmutable()を実行するのと同等のDateTimeImMutableオブジェクトを作成するために使用される便利な関数です。
同じ関数:calend date_create_immutable( 'time')は、新しいdateTimeImmutable( 'time')の実行とまったく同じであり、どちらも不変の日付と時刻のオブジェクトを生成します。
利便性:関数を使用して、コードがより簡潔に見える場合があり、特定の環境またはライブラリでの関数呼び出しメソッドの使用も容易にします。
不変性の重要性を理解する
DateTimeImmutableおよびその関連する機能を使用する主な目的は、オブジェクト状態の偶発的な変更を避けることです。ライフサイクルを通して日付時間オブジェクトが変更されていないことを確認するときに選択する必要があります。
オブジェクトの作成方法を選択してください
オブジェクト指向のライティングが好きな場合は、新しいdateTimeImMutable()を直接使用できます。
コードをより機能的にしたい場合、または関数呼び出しのみを受け入れるいくつかのフレームワークと互換性がある場合は、 date_create_immutable()を使用できます。
混乱を避けてください
文字列または配列を返す通常の関数について、 date_create_immutable()を間違えないでください。常にdateTimeImmutableオブジェクトを返し、そのすべての方法を呼び出すことができます。
DateTimeImmutable操作を備えています
date_create_immutable()を使用してオブジェクトを作成し、 modify() 、 add() 、 sub()など、不変クラスが提供するすべてのメソッドを介して日付を操作できます。これらの操作は新しいオブジェクトを返します。
DateTimeImmutableは、PHPの日付時間の不変のクラスであり、オブジェクトを変更できません。
date_create_immutable()は、 DateTimeImmutableオブジェクトを迅速に作成するために使用される便利な工場機能です。
それらを使用して、より安全で保守可能なコードを記述します。
本質的に2つの間に違いはありません。選択する作成方法は、コーディングの習慣とニーズに依存します。
詳細については、公式のPHPドキュメントを確認してください。
https://gitbox.net/manual/en/class.datetimeimmutable.php
https://gitbox.net/manual/en/function.date-create-immutable.php