1

これは、データをシリアライズしてからアンシリアライズするコードです。

 class magicmethod {
protected $name = array('Arfan','Azeem','Haider');
protected $fruit = array('Apple','Bannana');
protected $animal = 'Cat';

public function __sleep(){
    return array('name','animal');
}

public function __wakeup(){
    echo 'Going to Unserialized'; 
}
  }

$obj = new magicmethod;

$ser = serialize($obj);

var_dump($ser);

var_dump(unserialize($ser));

シリアル化して変数名に保存しまし$nameた。この後、このvarをシリアル化解除しました。すべてのクラスをシリアル化解除することもできます。すべてのクラスをシリアル化できないことをどのように行うことができるかを返すこともできます。 シリアル化した結果のみを取得したい。$animal$ser$sermagicmethodfruit array

4

2 に答える 2

0

これらはプロパティのデフォルトとして設定されているため、この動作が見られます...この例を見ると、期待どおりに動作します。

class magicmethod {
    protected $name;
    protected $fruit;
    protected $animal;

    public function setData(){
        $this->name = array('Arfan','Azeem','Haider');
        $this->fruit = array('Apple','Bannana');
        $this->animal = 'Cat';
    }
    public function __sleep(){
        return array('name','animal');
    }

    public function __wakeup(){
        echo 'Going to Unserialized'; 
    }
}

$obj = new magicmethod();
$obj->setData();
$ser = serialize($obj);
print_r($ser);

print_r(unserialize($ser));

何が起こっているかというと、unserialize が発生すると、クラス定義から新しいオブジェクトが作成され (ただし、コンストラクターはバイパスされます)、シリアル化されたデータがクラス プロパティにオーバーレイされます。シリアライズされた値のデータを注意深く見ると、果物の定義がないことがわかります。

于 2013-05-22T06:12:16.337 に答える
0

を呼び出すと、デフォルト値でunserialize()新しいmagicmethodオブジェクトが作成され$fruitます。fruit-array はシリアル化されたデータの一部ではありませんが、クラス定義から取得されます。

于 2013-05-22T06:12:44.840 に答える