PHPのアンシリアライズマジックメソッドの使い方
PHP では、シリアライズ/デシリアライズは、マジックメソッド __wakeup() によって実装されています。__wakeup() メソッドは、オブジェクトのデシリアライズ時に自動的に呼び出されます。
マジックメソッド__wakeup()を利用し、シリアライズされる先のクラスで定義し、そこでシリアライズされた内容を元に復元処理を行う。
逆シリアル化のために__wakeup()メソッドを利用する方法を示す簡単な例を以下に示します:
class MyClass {
public $data;
public function __construct($data) {
$this->data = $data;
}
public function __wakeup() {
// 反序列化逻辑
$this->data = unserialize($this->data);
}
}
// 序列化对象
$obj = new MyClass(serialize(['foo' => 'bar']));
$serialized = serialize($obj);
// 反序列化对象
$unserialized = unserialize($serialized);
var_dump($unserialized->data); // 输出: array(1) { ["foo"]=> string(3) "bar" }
上記の例では、MyClass クラスは、シリアル化された $data を unserialize() 関数を使って逆シリアル化する __wakeup() メソッドを定義しました。unserialize() 関数が呼び出されると、__wakeup() メソッドは自動的に実行されます。
ご留意を、__wakeup() 関数の引数リストは空です. シリアライズ解除時に引数を __wakeup() 関数に渡す必要はありません.