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

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

作成日: 更新日:

基本的な使い方

createFromInterfaceメソッドは、DateTimeInterfaceオブジェクトから新しいDateTimeImmutableオブジェクトを作成するメソッドです。PHP 5.5以降で使用可能です。このメソッドは、DateTimeInterfaceを実装したオブジェクト(例えば、DateTimeImmutableオブジェクトやDateTimeオブジェクト)を受け取り、そのオブジェクトが表す日時情報を元に、新しいDateTimeImmutableインスタンスを生成します。

DateTimeImmutableは不変オブジェクトであるため、日時操作を行う際に元のオブジェクトが変更されることなく、新しいオブジェクトが生成されるという利点があります。createFromInterfaceメソッドを使用することで、既存の日時情報を保持したまま、不変なDateTimeImmutableオブジェクトとして扱うことが可能になります。

引数には、DateTimeInterfaceの実装オブジェクトを指定します。この引数は必須であり、nullを渡すことはできません。引数として有効なDateTimeInterfaceオブジェクトが渡されない場合、TypeErrorが発生します。

戻り値は、指定されたDateTimeInterfaceオブジェクトに基づいて生成された新しいDateTimeImmutableオブジェクトです。もし、DateTimeInterfaceオブジェクトの生成に失敗した場合、falseを返します。

createFromInterfaceメソッドは、異なる日時オブジェクト間でデータの受け渡しを行う際に非常に便利です。例えば、DateTimeオブジェクトからDateTimeImmutableオブジェクトを生成したり、独自のDateTimeInterface実装からDateTimeImmutableオブジェクトを生成したりすることができます。これにより、日時処理の柔軟性と安全性を高めることができます。また、DateTimeImmutableオブジェクトを使用することで、マルチスレッド環境での安全な日時操作も実現可能です。

構文(syntax)

1DateTime::createFromInterface(DateTimeInterface $object): DateTime

引数(parameters)

DateTimeInterface $object

  • DateTimeInterface $object: 新しいDateTimeオブジェクトを作成するために使用する、DateTimeInterfaceインターフェースを実装したオブジェクト

戻り値(return)

DateTime

指定されたインターフェースから新しいDateTimeオブジェクトを生成して返します。

サンプルコード

PHP DateTime::createFromInterface でオブジェクトを作成する

1<?php
2
3/**
4 * DateTime::createFromInterface のサンプルコード
5 */
6
7// DateTimeImmutable オブジェクトを作成
8$immutable = new DateTimeImmutable('2024-03-15 10:00:00');
9
10// DateTimeImmutable インターフェースを実装したオブジェクトから DateTime オブジェクトを作成
11$datetime = DateTime::createFromInterface($immutable);
12
13// 結果を出力
14echo $datetime->format('Y-m-d H:i:s') . PHP_EOL;

PHP 8のDateTimeクラスにおけるcreateFromInterfaceメソッドは、DateTimeInterfaceを実装したオブジェクトからDateTimeオブジェクトを生成する際に利用します。引数にはDateTimeInterfaceを実装したオブジェクト(例えばDateTimeImmutableなど)を渡します。このメソッドは、渡されたDateTimeInterfaceオブジェクトが持つ日時情報を基に、新しいDateTimeオブジェクトを作成し、そのDateTimeオブジェクトを返します。

サンプルコードでは、まずDateTimeImmutableオブジェクト $immutable を生成しています。これは、2024年3月15日10時00分00秒を表す日時情報を持っています。次に、DateTime::createFromInterface() メソッドにこの $immutable オブジェクトを渡すことで、同じ日時情報を持つDateTimeオブジェクト $datetime を生成しています。最後に、format() メソッドを使って、DateTimeオブジェクトの日時情報を指定したフォーマット('Y-m-d H:i:s')で文字列として出力しています。この例では、DateTimeImmutableオブジェクトをDateTimeオブジェクトに変換していますが、DateTimeInterfaceを実装していれば、他のオブジェクトでも同様にDateTimeオブジェクトを生成できます。createFromInterfaceメソッドを使うことで、異なるDateTimeInterfaceの実装間で日時情報を簡単に変換することが可能になります。

DateTime::createFromInterfaceは、DateTimeInterfaceを実装したオブジェクトからDateTimeオブジェクトを生成する際に使用します。重要な点として、DateTimeImmutableなどのイミュータブルなオブジェクトを引数に渡した場合でも、生成されるのはミュータブルなDateTimeオブジェクトであるという点です。元のオブジェクトが変更されないことを前提とした処理を記述している場合、意図しない動作をする可能性があるため注意が必要です。また、タイムゾーンの情報も引き継がれますが、明示的にタイムゾーンを指定したい場合は、DateTimeZoneオブジェクトを別途指定する必要があります。引数に渡すオブジェクトがDateTimeInterfaceを実装しているかを確認することも重要です。