zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    ?>
  • 相关阅读:
    前端知识点(1)
    js防抖和节流
    react生命周期方法有哪些?
    vue音乐播放器
    vue天气查询
    vue+axios安装
    vue 实现todolist,包含添加,删除,统计,清空,隐藏功能
    vue简单计数器
    手动搭建的react环境中,关于图片引入的问题
    promise封装ajax
  • 原文地址:https://www.cnblogs.com/san-fu-su/p/5753497.html
Copyright © 2011-2022 走看看