现在开发中经常使用序列号和反序列化技术手段,php开发中也大量使用到。如下几个知名系统都使用了大量的序列化技术ecshop

2. phpcms内容管理系统

3.laravel框架

一、序列号的目的?

方便数组和对象的传输或存储,同时不丢失其类型和结构

如下是ecshop中对支付配置信息序列化serialize($pay_config)之后更新到数据库存储$pay_config = serialize($pay_config);

/* 安装,检查该支付方式是否曾经安装过 */

$sql = "SELECT COUNT(*) FROM " . $ecs->table('payment') . " WHERE pay_code = '$payment'";

if ($db->GetOne($sql) > 0)

{

$sql = "UPDATE " . $ecs->table('payment') .

" SET pay_config = '$pay_config'," .

" enabled = '1' " .

"WHERE pay_code = '$payment' LIMIT 1";

$db->query($sql);

}

二、对象的序列化

首先定义3个文件

user.php  //用户类

serialize.php //引入user.php类文件,初始对象,并且序列化对象

unserialize.php //引入user.php类文件,进行反序列化操作,然后调用对象中的变量或方法试一试文件user.phpserialize.phpunserialize.php

代码class userinfo{

public $name = '';

public $age = 0;

public function setName($n){

$this->name = $n;

}

public function getName(){

echo $this->name;

}

}include 'user.php';

$user = new User();

$user->age = 10;

$user->name = 'lizhenghua';

$u = '重新安名字';

$user->setName($u);

$user->getName();

$u = serialize($user);

file_put_contents('store',$u);include 'user.php';

$s = file_get_contents('store');

$user = unserialize($s);

echo $user->age; //调用age属性

$user->getName(); //调用getName()方法

var_dump($user); //输出$user对象看看

结果输出$user->age的结果:10

调用$user->getName()的结果:重新安名字

object(userinfo)#1 (2) {

["name"]=>

string(15) "重新安名字"

["age"]=>

int(10)

}

结果说明:

unserialize.php中

1 . 输出$user->age的结果:10         执行原理是对 O:8:"userinfo":2:{s:4:"name";s:15:"重新安名字";s:3:"age";i:10;}反序列化对象字符串之后执行的

2. 调用$user->getName()的结果:重新安名字      执行原理是反序列化之后重新实例化对象,在调用对象中的方法

原因:unserialize.php中执行var_dump($user); 发现对象被序列化处理只保存了所有的变量,但不会保存对象的方法,只会保存类的名称

php手册说明:

所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。

为了能够unserialize()一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。 如果要想在另外一个文件中解序列化一个对象,这个对象的类必须在解序列化之前定义,可以通过包含一个定义该类的文件或使用函数spl_autoload_register()来实现。

在应用程序中序列化对象以便在之后使用,强烈推荐在整个应用程序都包含对象的类的定义。 不然有可能出现在解序列化对象的时候,没有找到该对象的类的定义,从而把没有方法的类__PHP_Incomplete_Class_Name作为该对象的类,导致返回一个没有用的对象。

三、数组序列化和反序列话

/**

* 数组序列化,这里只是简单演示一下,实际项目中数组序列化之后存储在数据库,在调用的地方反序列输出

*/$arr = array('li','wang','ba');

print_r($arr);

$a = serialize($arr);

print_r($a);

$new_a = unserialize($a);

print_r($new_a);

php 传递类名,php 对象和数组序列化 serialize()返回字符串方便存储和传递 unserialize()反序列化 不丢失类型和结构...相关推荐

  1. spring mvc 控制器方法传递一些经验对象的数组

    由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstru ...

  2. Android服务之Service(四)--ASDL传递复杂数据对象

    此实例与前面aidl不同之处在于,传递的数据比较复杂,传递了自定义数据对象,本实例使用到了两个数据对象Person和Pet,其中Person是作为远程调用Service传递的参数,Pet是远程Serv ...

  3. C/C++ 数组作为参数传递 指针 引用——VS——普通值传递、指针传递、引用传递

    文章目录 1 C++ 值传递.指针传递.引用传递详解 值传递: 指针传递: 引用传递: 2 数组作为函数的形参 2.1 一维数组传递 2.2 二维数组传递 总结 1 C++ 值传递.指针传递.引用传递 ...

  4. php json 数组 区别,PHP实战:JSON两种结构之对象和数组的理解

    <PHP实战:JSON两种结构之对象和数组的理解>要点: 本文介绍了PHP实战:JSON两种结构之对象和数组的理解,希望对您有用.如果有疑问,可以联系我们. JSON简介 PHP实战JSO ...

  5. DataTable转Json对象或数组

    DataSet转Json DataSet.Table[0]先转为json字符串,然后再由字符串转为Json对象或数组 DataSet转json字符串 using Newtonsoft.Json;/// ...

  6. mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例

    在写序列化serialize与反序列化unserialize()时,我们先来看看: serialize - 产生一个可存储的值的表示 描述 string serialize ( mixed $valu ...

  7. php序列化(serialize)和反序列化(unserialize)函数

    用法:serialize().unserialize() 适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方.这有利于存储或传递 PHP 的值,同时不 ...

  8. springMVC通过ajax传递参数list对象或传递数组对象到后台

    springMVC通过ajax传递参数list对象或传递数组对象到后台 环境: 前台传递参数到后台 前台使用ajax 后台使用springMVC 传递的参数是N多个对象 JSON对象和JSON字符串 ...

  9. oracle存储过程如何传递一个bean对象_对象传输,序列化和反序列化

    一.前言 二.基本概念 2.1 序列化和反序列化的定义及最重要的作用 序列化的定义:Java序列化就是指把Java对象转换为字节序列的过程: 反序列化的定义:Java反序列化就是指把字节序列恢复为Ja ...

最新文章

  1. 软件“身份证”频被盗 金山安全呼吁企业加强管理
  2. ML:机器学习中与模型相关的一些常见的判断逻辑(根据自调整阈值计算阳性率)
  3. 三十二、R语言基本语法(下篇)
  4. Eclipse-无法引用maven依赖的类/没有MavenDependencies/没有buildpath
  5. Digilent提供的Pmod AD1驱动程序
  6. 林子雨版《大数据技术原理与应用》实验五 信息挖掘详解
  7. 史上最全正则表达式语法,文末附常用表达式!
  8. vuejs --- 子组件向父组件传值(子传父)
  9. 互联网金融学习总结(5)——市场主流的风控模型简要学习总结
  10. python三维图旋转_3D图像旋转简单的ITK Python(3D Image Rotation Simple ITK Python)
  11. 【项目】小餐馆(点餐系统)项目框架
  12. R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍
  13. ModelCoder模块系列:PID模块介绍
  14. HTTP网络劫持的原理与过程、网站被劫持怎么办?
  15. 月入万元快递哥遭遇AI小鸟怎么办
  16. 劳务派遣有五险一金吗?
  17. 基于STM32F429IGT6的NAND FLASH读写测试(CUBEMX)
  18. 与其被生活逼,不如被自己逼
  19. 微信支付2.0版本,更换参数即可使用
  20. 网络安全工程师自主学习计划表(具体到阶段目标)

热门文章

  1. Kubernetes 上调试 distroless 容器
  2. OpenStack发布Ussuri版本 实现智能开源基础设施的自动化
  3. 【IPF2020】浪潮集团副总裁、渠道管理部总经理王峰:赋能智慧生态 筑基新基建
  4. 腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比
  5. 当我们在聊 Serverless 时你应该知道这些 | CSDN博文精选
  6. 设置linux文件系统密码,busybox 文件系统设置 登陆 login 密码 password shadow
  7. java 数组数据类型_java基本数据类型和数组
  8. java线性表源代码_线性表java实现之顺序存储源码
  9. rl滤波器原理_滤波器基本原理.ppt
  10. Nexus 3.31.1 maven 私服 仓库和IntelliJ IDEA 2021.2 实战篇 linux