• php的对象串行化


     php的对象串行化,就是把对象传化成二进制字符串格式,便于存储在文件、数据库中,或者在网络上传输对象数据,其中涉及的函数是:

      1.serialize()函数:串行化对象,把对象转换成二进制字符串格式;

      2.unserialize()函数:反串行化对象,把二进制字符串转换成对象;

      3.魔术方法 __sleep():用来将对象中的部分成员串行化;

      4.魔术方法 __wakeup():用来在二进制串重新组成一个对象时,为新对象中的成员属性重新初始化。

      实例:

      1.index.php文件:

    <?php
    header("Content-Type:text/html;charset=utf-8");
    class ClassAutoloader {
        public function __construct() {
            spl_autoload_register(array($this, 'loader'));
        }
        private function loader($className) {
            include $className . '.php'; 
        }
    }
    
    $autoloader = new ClassAutoloader();
    
    echo new ClassShow;

    2.person.php文件:

    <?php
    
    class Person{
        private $name;
        private $age;
        private $sex;
        function __construct($name = '', $sex ='', $age = ''){
            $this->name = $name;
            $this->sex = $sex;
            $this->age = $age;
        }
        
        function say(){
            return "我的名字:".$this->name.",姓别:".$this->sex.",年龄:".$this->age."<br>";
        }
        
        /**
         * 魔术方法__sleep() 在对象串行化时用数组设置
         * 需要串行化的对象属性,这里忽略了属性 $sex
         */
       function __sleep(){
            $arr = array("name", "age");
            return $arr;
        }
        
        /**
         * 魔术方法 __wakeup() 用于在反串行化时对对象
         * 属性重新赋初值
         */
        function __wakeup(){
            $this->name = "李佳";
            //$this->sex = "女";
            $this->age = 26;
        }
    }

    3.ClassShow.php文件:

    <?php
    class ClassShow{
        function __toString(){
            $str = '';
            $obj1 = new person("张三", "男", 23);
            $str .= "<strong style='color:#789'>原始内容:</strong><br>" . $obj1->say();
            
            $str .= "<br><br>";
            
            /**
              * 串行化对象
              * 
              * 变量 $objStr 才是串行化需要得到的数据,
              * $objStr 中的数据可以用文件、数据库储存,
              * 可以用互联网进行传输,
              * 这里省略了这些步骤。
              */
            $objStr = serialize($obj1);
            $str .= "<strong style='color:#789'>对象串行化内容:</strong><br>" . $objStr;
            
            $str .= "<br><br>";
            
            //反串行化对象
            $obj2 = unserialize($objStr);
            $str .= "<strong style='color:#789'>反串行化内容:</strong><br>" . $obj2->say();
            return $str;
        }
    }

    注意:上面的实例包含了自动加载类 spl_autoload_register() 和 魔术方法 __toString() 的应用!

    效果如下:

  • 相关阅读:
    剑指offer14-链表中倒数第k个结点
    剑指offer15-翻转链表
    Matlab矩阵操作
    CUDA线程
    CUDA编程前言
    ROS常用工具
    ROS理解参数服务器param demo
    ROS手动编写服务端和客户端service demo(C++)
    ROS手动编写消息发布器和订阅器topic demo(C++)
    ROS参数服务器(Parameter Server)
  • 原文地址:https://www.cnblogs.com/qingsong/p/13122050.html
Copyright © 2020-2023  润新知