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=山田太郎
スポンサーリンク
シャローコピー(浅いコピー)となることに注意
今回紹介したサンプルコードは、いわゆる、シャローコピー(浅いコピー)で配列の内容をオブジェクトにコピーする。
つまり、コピー元の配列のキー値にオブジェクトや配列などの参照型が含まれている場合、値のコピーではなく、オブジェクトへの参照がコピーされることに、注意するべし。
0 件のコメント:
コメントを投稿