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

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

作成日: 更新日:

基本的な使い方

__unserializeメソッドは、PHPのunserialize()関数によってシリアライズされた文字列からオブジェクトが復元される際に、そのオブジェクトの状態を再構築するために実行されるメソッドです。PHPには、オブジェクトなどのデータ構造を、保存や転送が可能な文字列形式に変換する「シリアライズ」という機能があります。serialize()関数で文字列化されたデータは、unserialize()関数によって元のオブジェクトに戻すことができます。この__unserializeメソッドは、unserialize()の処理過程でPHPエンジンにより自動的に呼び出されるマジックメソッドの一種です。このメソッドは、シリアライズされたデータが格納された配列を引数として受け取り、それを利用してオブジェクトの各プロパティを初期化します。RecursiveArrayIteratorクラスの場合、このメソッドは、シリアライズされていたイテレータの対象配列や内部的な状態フラグなどを正しく復元し、アンシリアライズ後もオブジェクトが意図通りに動作できるようにする重要な役割を担います。通常、このメソッドは__serialize()メソッドと対で機能し、開発者が直接呼び出すものではありません。

構文(syntax)

1<?php
2
3class MyRecursiveArrayIterator extends RecursiveArrayIterator
4{
5    /**
6     * このメソッドは unserialize() 関数によってオブジェクトが
7     * 復元される際に、内部的に自動で呼び出されます。
8     *
9     * @param array $data 復元されるプロパティを含む配列
10     */
11    public function __unserialize(array $data): void
12    {
13        echo "__unserialize() が呼び出されました。\n";
14
15        // 親クラスの __unserialize を呼び出し、元の復元処理を実行します。
16        parent::__unserialize($data);
17    }
18}
19
20// 配列から MyRecursiveArrayIterator のインスタンスを作成します。
21$iterator = new MyRecursiveArrayIterator(['a', 'b', ['c', 'd']]);
22
23// serialize() を使ってオブジェクトを文字列に変換します。
24$serializedString = serialize($iterator);
25
26// unserialize() を使って文字列からオブジェクトを復元します。
27// この処理の過程で、__unserialize() メソッドが自動的に呼び出されます。
28$restoredIterator = unserialize($serializedString);
29
30?>

引数(parameters)

array $data

  • array $data: シリアライズされたオブジェクトのデータを含む配列

戻り値(return)

void

__unserialize メソッドは、オブジェクトのデシリアライズ処理を行います。このメソッドは値を返しません。