phpマジックメソッド_sleep() __wakeup()

977 ワード

__sleep()と_wakeup()
public array __sleep ( void )
void __wakeup ( void )
serialize()関数は、クラスにマジックメソッドがあるかどうかをチェックします.sleep().存在する場合は、シーケンス化操作を実行する前にメソッドが呼び出されます.この機能を使用すると、オブジェクトをクリーンアップし、オブジェクト内のすべてのシーケンス化すべき変数名を含む配列を返すことができます.メソッドが何も返さない場合、NULLはシーケンス化され、E_NOTICEレベルのエラーが発生する.
 
例:
 class user {
    public $name;
    public $id;

    function __construct() {    //  id     uniq id 
        $this->id = 'asas';
    }

    function __sleep() {       //      id  
        return(array('name'));
    }

    function __wakeup() {
        $this->id = uniqid();
    }
}

$u = new user();
$u->name = "Leo";
$s = serialize($u); //serialize     u,      id  ,id    
$u2 = unserialize($s); //unserialize    ,id      

//  u u2    id  
print_r($u);
print_r($u2);

結果:
user Object ( [name] => Leo [id] => asas ) user Object ( [name] => Leo [id] => 5621ed9f6614c )