【PHP8.x】createFromInterfaceメソッドの使い方

createFromInterfaceメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

createFromInterfaceメソッドは、既存のDateTimeInterfaceオブジェクトから新しいDateTimeImmutableオブジェクトを生成するメソッドです。PHPで日付と時刻を扱うDateTimeクラスやDateTimeImmutableクラスは、共通してDateTimeInterfaceインターフェースを実装しています。このメソッドは、そのDateTimeInterfaceを実装したオブジェクト(例えばDateTimeオブジェクトや、別のDateTimeImmutableオブジェクト)を引数として受け取ります。

引数として渡されたオブジェクトが持つ日付、時刻、およびタイムゾーンの情報をすべて引き継ぎ、それらと同じ値を持つ新しいDateTimeImmutableオブジェクトを作成して返します。このメソッドの主な目的は、変更可能なDateTimeオブジェクトを、より安全な変更不可能なDateTimeImmutableオブジェクトに変換することにあります。

DateTimeImmutableオブジェクトは、一度作成されると、その後の日付や時刻の操作によって自身の状態が変わることがありません。日付や時刻を変更する操作を行うと、常に新しいDateTimeImmutableオブジェクトが返されるため、元のオブジェクトや、そのオブジェクトを参照している他のコードに予期しない影響を与える「副作用」を防ぐことができます。これは、プログラムの予測可能性と信頼性を高める上で非常に重要です。

特に、関数やメソッドに日付オブジェクトを渡す際、その関数内で日付が意図せず変更されてしまうことを避けたい場合に、createFromInterfaceメソッドを使ってDateTimeImmutableに変換しておくことは、堅牢なシステムを構築する上で非常に有効な手法です。これにより、データの整合性を保ち、不具合の発生リスクを低減することができます。

構文(syntax)

1<?php
2
3$dateTime = new DateTime('2023-01-15 10:30:00');
4$immutableDateTime = DateTimeImmutable::createFromInterface($dateTime);
5
6echo $immutableDateTime->format('Y-m-d H:i:s');
7
8?>

引数(parameters)

DateTimeInterface $object

  • DateTimeInterface $object: 新しいDateTimeImmutableオブジェクトを作成するための、既存のDateTimeInterface実装を持つオブジェクト

戻り値(return)

DateTimeImmutable

DateTimeImmutableインターフェースのインスタンスから、新しいDateTimeImmutableオブジェクトを生成します。

サンプルコード

PHP DateTimeImmutable::createFromInterface で生成する

1<?php
2
3/**
4 * DateTimeInterface オブジェクトから DateTimeImmutable オブジェクトを作成するサンプル
5 */
6
7// DateTimeInterface を実装したオブジェクトの例
8$dateTime = new DateTime();
9
10// DateTimeImmutable::createFromInterface を使用して DateTimeImmutable オブジェクトを生成
11$immutableDateTime = DateTimeImmutable::createFromInterface($dateTime);
12
13// 結果の確認 (日付のフォーマットは例として 'Y-m-d H:i:s' を使用)
14echo $immutableDateTime->format('Y-m-d H:i:s') . PHP_EOL;
15
16// DateTimeInterface を実装した別のオブジェクトの例
17$dateTimeZone = new DateTimeZone('Asia/Tokyo');
18$dateTimeWithTimezone = new DateTime('2024-01-01 10:00:00', $dateTimeZone);
19
20// DateTimeImmutable::createFromInterface を使用して DateTimeImmutable オブジェクトを生成 (タイムゾーン付き)
21$immutableDateTimeWithTimezone = DateTimeImmutable::createFromInterface($dateTimeWithTimezone);
22
23// 結果の確認 (タイムゾーンを含めて表示)
24echo $immutableDateTimeWithTimezone->format('Y-m-d H:i:s T') . PHP_EOL;

このサンプルコードは、PHPのDateTimeImmutableクラスのcreateFromInterfaceメソッドの使い方を示しています。createFromInterfaceメソッドは、DateTimeInterfaceを実装したオブジェクトを受け取り、それに基づいて新しいDateTimeImmutableオブジェクトを作成します。DateTimeImmutableオブジェクトは、一度作成されると変更できないという特徴を持っています。

サンプルでは、まずDateTimeオブジェクトを生成し、これをcreateFromInterfaceメソッドに渡してDateTimeImmutableオブジェクトを作成しています。作成されたDateTimeImmutableオブジェクトは、formatメソッドを使って指定された形式で出力されます。

次に、タイムゾーンを指定したDateTimeオブジェクトを生成し、同様にcreateFromInterfaceメソッドでDateTimeImmutableオブジェクトを作成する例を示しています。これにより、タイムゾーンの情報も保持したDateTimeImmutableオブジェクトが作成されます。

createFromInterfaceメソッドを使用することで、既存のDateTimeInterfaceオブジェクトを基に、不変なDateTimeImmutableオブジェクトを簡単に生成できます。これは、日付と時刻の情報を安全に扱うために役立ちます。引数にはDateTimeInterfaceを実装したオブジェクト(DateTime, DateTimeImmutableなど)を指定します。戻り値は、与えられたDateTimeInterfaceオブジェクトと同じ日時情報を持つ新しいDateTimeImmutableオブジェクトです。

DateTimeImmutable::createFromInterface()は、DateTimeInterfaceを実装したオブジェクトから、変更不可能なDateTimeImmutableオブジェクトを生成する際に利用します。主な注意点として、引数には必ずDateTimeInterfaceを実装したオブジェクト(例: DateTime, DateTimeImmutable)を渡す必要があります。異なる型のオブジェクトを渡すとエラーが発生します。また、createFromInterface()は元のDateTimeInterfaceオブジェクトのコピーを作成するため、元のオブジェクトを変更してもDateTimeImmutableオブジェクトには影響しません。タイムゾーン情報もコピーされるため、タイムゾーン付きのDateTimeInterfaceオブジェクトを渡すと、そのタイムゾーン情報も保持されます。日付フォーマットはformat()メソッドで指定できます。

【PHP8.x】createFromInterfaceメソッドの使い方 | いっしー@Webエンジニア