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() 関数に渡す必要はありません.

bannerAds