PHPで配列を任意の型のオブジェクトに変換する方法

2022年8月21日日曜日

PHP

t f B! P L

enter image description here

PHPで、配列を任意のクラスの型に変換する方法を紹介する。

スポンサーリンク

配列をオブジェクトに変換

さっそく、コードを書いていこう。

以下は、コピー元の配列と、コピー先のオブジェクトを引数に取り、配列の内容をオブジェクトにコピーする関数である。

/**
 * 配列($source)の各キー値を、オブジェクト($dust)の同名プロパティにコピーする
 *
 * @param array $source 配列 (コピー元)
 * @param mixed $dust オブジェクト(コピー先)
 */
function array_to_object(array $source, mixed $dust): void
{
    foreach ($source as $key => $value) {
        if (property_exists($dust, $key)) $dust->$key = $value;
    }
}

タイトルでは、配列をクラスに変換と歌っているが、正確には、配列の各キーと同じ名前を持つオブジェクトのプロパティに値をコピーする流れとなる。

それでは、上で作成した関数を使ってみよう。

// ユーザークラス
class User
{
    public int $id;
    public string $name;
}

// 配列データ
$source = [
    "id" => 100,
    "name" => "山田太郎"
];

$dust = new User();
array_to_object($source, $dust);
printf("id=%d, name=%s", $dust->id, $dust->name);

実行すると、User クラスに値がコピーされていることが分かる。

id=100, name=山田太郎

スポンサーリンク

シャローコピー(浅いコピー)となることに注意

今回紹介したサンプルコードは、いわゆる、シャローコピー(浅いコピー)で配列の内容をオブジェクトにコピーする。

つまり、コピー元の配列のキー値にオブジェクトや配列などの参照型が含まれている場合、値のコピーではなく、オブジェクトへの参照がコピーされることに、注意するべし。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ