• PHP中的序列化


    接口

    Serializable {
        abstract public string serialize (void);
        abstruact public void unserialize (string $serialized);
    }

    序列化简述:

      使用serialize()保存对象中的所有变量,当对象被摧毁的时候,可以使用unserialize()重造对象。事实上,我们不需要保存对象中的方法,方法并不含有对象的属性。

      使用serialize和unserialize之前,必须事先定义要序列化的对象所属的类。

      serialize()会返回一个包含对象变量及其值的字符串。我们可以把该字符串保存到文件中,以便日后使用。

    <?php
    //classa.inc:
        class A {
            public $one = 1;
            
            public function show_one() {
                echo $this->one;
            }
        }
    
    //page1.php
        include ("classa.inc");
        
        $a = new A;
        $s = serialize($a);
        file_put_contents('store', $s);
    
    //page2.php:
    include ("classa.inc");
    $s = file_get_contents('store');
    $a = unserialize($s);
    
    $a->show_one();

    再看看__sleep()和__wakeup()两个magic函数。

      如果你的类中包含__sleep()函数,serialize()序列化之前会先调用__sleep()函数。__sleep()函数应该返回一个包含所有应当序列化的变量名的数组。如果__sleep()什么也不返回,序列化时会发出E_NOTICE错误。注意:私有变量无法被序列化,否则发出E_NOTIC错误。(或者可以自行实现Serializable接口)

      与之相反,unserialize()会检查__wakeup()函数,如果有这个函数,则调用他。__wakeup()函数被用来重新构造object拥有的任何资源。可以用来重新建立数据库连接。

    <?php
    class Connection
    {
        protected $link;
        private $dsn, $username, $password;
        
        public function __construct ($dsn, $username, $password)
        {
            $this->dsn = $dsn;
            $this->username = $username;
            $this->password = $password;
            $this->connect();
        }
    
        private function connect()
        {
            $this->link = new PDO ($this->dsn, $this->username, $this->password);
        }
    
    
        
        public function __sleep()
        {
        //返回需要序列化的变量名
            return array('dsn', 'username', 'password');
        }
          
        public function __wakeup()
        {
            $this->connect();
        }
    }
    ?>
  • 相关阅读:
    HBase in Action前三章笔记
    关于视频YUV
    23种设计模式用英语怎样表达?
    UVA 10620
    工具,帮助我们更高效的工作
    VS下控制台执行保持(不要一闪而过)
    C语言之结构体
    Linux grep命令和正则表达式
    C#中的“静态”
    推荐一个计算机视觉图书:python计算机视觉编程
  • 原文地址:https://www.cnblogs.com/san-fu-su/p/5753497.html
Copyright © 2020-2023  润新知