php 魔术方法

php魔术方法

魔术方法__sleep(),__wakeup()

  • 这两个方法是在对象的序列化与反序列话里使用的,当序列化serialize对象时,可以把对象里的属性和方法转换成连续的bytes数据,保存在一个文件里或者在网络上传输,当需要使用这个对象时,就可以反序列话unserialize这个字符串,得到这个对象,然后继续使用。
  • 当对一个对象序列化时,php就会调用__sleep方法(如果存在的话),在反序列化时,php就会调用__wakeup方法(如果存在的话)。__sleep这个方法可以用于清理对象,并返回一个包含对象中所有变量名称的数组。如果该方法不返回任何内容,则NULL被序列化,导致一个E_NOTICE错误。在反序列化unserialize时,会检查是否存在__wakeup方法,如果存在,则会调用__wakeup方法,预先准备对象数据。
  • __sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。__wakeup 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
    class user {
      public $name;
      public $id;
    
      function __construct() {    // 给id成员赋一个uniq id
          $this->id = 123;
      }
    
      function __sleep() {       //此处不串行化id成员
          return(array('name'));
      }
    
      function __wakeup() {
          $this->id = 456;
      }
    }
    
    $u = new user();
    $u->name = "Leo";
    $s = serialize($u); //serialize串行化对象u,此处不串行化id属性,id值被抛弃
    $u2 = unserialize($s); //unserialize反串行化,id值被重新赋值
    
    print_r($u);
    print_r($s);
    print_r($u2);    
    

相关链接

posted @ 2025-03-11 20:34  绝技小嗨皮  阅读(29)  评论(0)    收藏  举报
Title