首页 后端开发 php教程 php中对象的序列化与反序列化

php中对象的序列化与反序列化

Jun 28, 2018 pm 03:38 PM

 * 一、对象的序列化

 * 1.php中的任何值都可以序列化为包含字节流表示的字符串来表示

 * 2.序列化对象可以保存到变量或者文件中,方便保存和传送

//数值序列化

$num = 500;
echo serialize($num),&#39;<br>&#39;;
登录后复制

//字符串序列化

$name = &#39;peter&#39;;
echo serialize($name),&#39;<br>&#39;;
登录后复制

//数组序列化

$course = [&#39;php&#39;,&#39;mysql&#39;,&#39;thinkphp&#39;];
echo serialize($course),&#39;<br>&#39;;
登录后复制

//布尔序列化

$isPass = true;
echo serialize($isPass),&#39;<br>&#39;;
登录后复制

//对象序列化:以一个数据库连接类为例

class Db
{
    //连接参数与返回值
    public $db = null;
    public $host;
    private $user;
    private $pass;
    //构造方法
    public function __construct($host=&#39;localhost&#39;,$user=&#39;root&#39;,$pass=&#39;root&#39;)
    {
        //类属性初始化
        $this->host = $host;
        $this->user = $user;
        $this->pass = $pass;
        
        //创建对象时自动连接数据库
        $this->connect();
    }
    
    //连接数据库的方法
    private function connect()
    {
        $this->db = mysqli_connect($this->host,$this->user, $this->pass);
    }
    
    //serialize($obj)序列化的时候,会自动调用__sleep(void)
    //主要用于对象休眠时的一些清理工作,例如指定哪些属性允许进入到休眠对象的属性序列中
    public function __sleep()
    {
        //返回由属性名字符串组成的索引数组,指示序列化时要保存的字段名
        return [&#39;host&#39;,&#39;user&#39;,&#39;pass&#39;];
        //对于本案例来说,如果连接参数不变的情况下,只要将$this->db保存到对象序列中即可
//        return [&#39;db&#39;];
    }
    
    //unserialize()反序列化的时候,会自动调用__wakeup(void)
    //主要用于唤醒对象时要做的初始化工作,例如本例中的:自动连接数据库
    public function __wakeup()
    {
        $this->connect();
    }
    
}
$obj = new Db();
登录后复制

* 对象序列化的特点:

* 1.只保存对象中的属性,不保存方法

* 2.只保存类名,不保存对象名

echo serialize($obj);
登录后复制

//为了演示反序列化,我们将序列化的对象保存到一个变量中,当然也可以保存到文件中

$tmp1 = serialize($obj);
登录后复制

//查看序列化后的变量内容,与之前序列化内容是一样的

echo $tmp1;
登录后复制

//现在进行反序列化操作,将保存到变量中的对象取出来

$tmp2 = unserialize($tmp1);
登录后复制

//检测$tmp2是否是一个对象

echo &#39;<hr>&#39;;
echo is_object($tmp2) ? &#39;对象&#39; : &#39;不是&#39;;
echo &#39;<hr>&#39;;
登录后复制

//获取属性,查看数据库连接对象

var_dump($tmp2->db);
登录后复制


以上是php中对象的序列化与反序列化的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

php数组如何循环转为对象 php数组如何循环转为对象 Aug 10, 2023 pm 02:44 PM

php数组循环转为对象的方法有两个:1、使用强制类型转换可以将数组转换为对象,要求数组的键必须是有效的对象属性名;2、创建一个新的对象,并将数组的元素复制到该对象中,不依赖于数组键是否有效作为对象的属性名。

php对象操作和数组操作哪个快 php对象操作和数组操作哪个快 Jul 12, 2023 pm 03:04 PM

php数组操作比php对象操作更快,其原因有:1、对象操作涉及创建对象、调用方法和访问属性等步骤,在性能上可能会比较慢;2、数组操作是一种特殊类型的变量,可以容纳多个值,对数组使用不同的方法和函数,可以对数组进行快速和有效的操作。

PHP中的序列化是什么?潜在的安全风险是什么? PHP中的序列化是什么?潜在的安全风险是什么? Apr 02, 2025 pm 05:45 PM

PHP中的序列化是将对象或数据结构转换为字符串的过程,主要通过serialize()和unserialize()函数实现。序列化用于保存对象状态,以便在不同请求或系统间传递。潜在安全风险包括对象注入攻击和信息泄露,避免方法包括:1.限制反序列化的类,使用unserialize()函数的第二个参数;2.验证数据源,确保来自可信来源;3.考虑使用JSON等更安全的数据格式。

php对象和数组区别是什么 php对象和数组区别是什么 Aug 24, 2023 pm 05:02 PM

php对象和数组区别是:1、对象是一个复合数据类型,而数组是一个简单的数据类型;2、对象的属性和方法可以通过对象的实例来访问,而数组的元素可以通过索引来访问;3、对象是一个封装了属性和方法的实体,而数组是一个有序的元素集合;4、对象在PHP中是通过引用来传递的,而数组在PHP中是通过值来传递的;5、对象适用于描述具有状态和行为的实体,而数组适用于存储和处理大量的相似数据。

如何在PHP中使用对象变量 如何在PHP中使用对象变量 Sep 13, 2023 pm 12:59 PM

如何在PHP中使用对象变量,需要具体代码示例在PHP中,使用对象变量可以更方便地管理和操作对象。对象变量是存储对象实例的一种数据类型,可以通过调用类的方法和访问类的属性来操作对象。下面将具体介绍在PHP中如何使用对象变量,并提供相应的代码示例。创建对象在PHP中,可以使用new关键字来创建对象。示例如下:classCar{public$colo

php数组是对象吗 php数组是对象吗 Jul 22, 2022 pm 05:24 PM

php数组不是对象。在php中,数组和对象是两种不同的数据类型,数组是一组有序数据的集合;而对象是类进行实例化后的结果,里面不仅有属性,还有方法。对象可以封装对数据的操作,而数组是办不到的。

探讨如何在PHP中调用对象方法 探讨如何在PHP中调用对象方法 Mar 28, 2023 pm 03:00 PM

PHP是一种非常流行的编程语言,可以用于开发各种应用程序,尤其是Web应用程序。在PHP中,面向对象编程是其重要特性之一。本文将探讨如何在PHP中调用对象方法。

php怎么获取一个对象中所有的方法 php怎么获取一个对象中所有的方法 Mar 23, 2023 am 11:12 AM

在PHP中,获取一个对象中所有的方法非常简单,可以利用PHP标准库中的 ReflectionClass 类实现。ReflectionClass 类提供了在PHP中反射一个类的所有信息的方法,包括类名、属性和方法等。下面我们详细介绍如何使用 ReflectionClass 类来获取一个对象中所有的方法。

See all articles