php中_sleep跟_wakeup

來源:互聯網
上載者:User
php中__sleep和__wakeup
在php中,__sleep和___wakeup是兩個分別自對象序列化前和後分別調用的方法,
其中__sleep在一個對象序列化前調用,它不接收任何參數,但會返回數組,這裡可以放置哪些屬性需要序列化,比如下面的例子:

class Customer { private $name; private $credit_card_number;  public function setName($name) { $this->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”); //只有name會序列化 } } $c = new Customer(); $c->setName(“Stuard”); $c->setCC(“456789″); $data = serialize($c).”\n”; echo $data.”\n”; Output: O:8:”Customer”:1:{s:14:” Customer name”;s:5:”Stuard”;}


上面在序列化前,__sleep中指定了只有name屬性會序列化,而creaditcard不會。

而__wakeup則相反,它是在還原序列化前觸發的,比如下面例子:
class Customer { private $name; private $credit_card_number;  public function setName($name) { $this->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->setName(“Stuart”); $c->setCC(“1234567890123456″); $data = serialize($c).”\n”; var_dump(unserialize($data)); Output: object(Customer)#2 (2) { ["?name:private"?]=> string(5) “Stuart”? ["?credit_card_number:private"]=> string(16) ’1234567890123456? }

上面的代碼中,因為序列化時使用了__sleep,沒把creadit cardnumber屬性序列化,因此在還原序列化unserialize調用前,會先調用__wakeup方法,比如這裡可以重新在資料庫中取得資料,再此進行操作
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.