ホームページ  >  記事  >  バックエンド開発  >  PHPの__sleepと__wakeup

PHPの__sleepと__wakeup

WBOY
WBOYオリジナル
2016-06-23 14:33:35999ブラウズ

php では、__sleep と ___wakeup はそれぞれオブジェクトのシリアル化の前後に呼び出されるメソッドです。このうち、__sleep はパラメータを受け取りませんが、どの属性を返します。次の例のように、シリアル化する必要があるものをここに配置できます。 = $ name; } public function getName() { return $this->name; } public function setCC($cc) { $this->credit_card_number = $cc; ;credit_card_ 番号 ; } public function __sleep() { return array("name"); // 名前のみがシリアル化されます } } $c = new Customer(); c-> setCC("456789"); $data = Serialize($c)."n"; 出力: O:8:"顧客":{s:14:" Customer name”; s:5:"Stuard";}

シリアル化する前に、__sleep は name 属性のみをシリアル化するように指定しましたが、creaditcard はシリアル化しません。

そして __wakeup はその逆で、次の例のように逆シリアル化の前にトリガーされます。 >name = $name; } public function getName() { return $this->name; } public function setCC($cc) { $this->credit_card_number = $cc; } public function getCC() { return $ this->credit_card_number; } public function __sleep() { return array(“name”); } public function __wakeup() { if($this->name == “Stuart”) { //データベースに再入力します$this->credit_card_number = "1234567890123456" } } } $c = new Customer(); $c->setCC("123456789012 3456"); = シリアル化($c).”n”; var_dump(unserialize($data)); 出力: object(Customer)#2 (2) { ["?name:private"?]=> "? ["?credit_card_number:private"]=> string(16) '1234567890123456³ }

上記のコードでは、シリアル化中に __sleep が使用されているため、 crreadit Cardnumber 属性がシリアル化されているため、デシリアライズ中に unserialize が呼び出される前に、たとえば、ここではデータベース内のデータを再取得してから操作を実行できます



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP の __clone()次の記事:PHP の __clone()