加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php反序列化你真的搞明白了吗?php反序列化知识回顾

发布时间:2021-12-23 16:52:38 所属栏目:PHP教程 来源:互联网
导读:我们学习完一个知识再实际运用之后,往往会有新的收获,因此,这篇文章主要带大家回顾php反序列化的相关知识,希望能让大家有收获,下面我们就一起来看看吧。 1 serialize()函数 对于所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来
 我们学习完一个知识再实际运用之后,往往会有新的收获,因此,这篇文章主要带大家回顾php反序列化的相关知识,希望能让大家有收获,下面我们就一起来看看吧。
 
1 serialize()函数
 
       对于“所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。”一开始看这个概念可能有些懵,但之后也是慢慢理解了
 
       在程序执行结束时,内存数据便会立即销毁,变量所储存的数据便是内存数据,而文件、数据库是“持久数据”,因此PHP序列化就是将内存的变量数据“保存”到文件中的持久数据的过程。
 
 $s = serialize($变量); //该函数将变量数据进行序列化转换为字符串
 file_put_contents(‘./目标文本文件', $s); //将$s保存到指定文件
       下面通过一个具体的例子来了解一下序列化:
 
<?php
class User
{
  public $age = 0;
  public $name = '';
 
  public function PrintData()
  {
    echo 'User '.$this->name.'is'.$this->age.'years old. <br />';
  }
}
//创建一个对象
$user = new User();
// 设置数据
$user->age = 20;
$user->name = 'daye';
 
//输出数据
$user->PrintData();
//输出序列化之后的数据
echo serialize($user);
 
?>
       这个是结果:
 
 
 
       可以看到序列化一个对象后将会保存对象的所有变量,并且发现序列化后的结果都有一个字符,这些字符都是以下字母的缩写。
 
a - array         b - boolean
d - double         i - integer
o - common object     r - reference
s - string         C - custom object
O - class         N - null
R - pointer reference   U - unicode string
       了解了缩写的类型字母,便可以得到PHP序列化格式
 
O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"daye";}
对象类型:长度:"类名":类中变量的个数:{类型:长度:"值";类型:长度:"值";......}
       通过以上例子,便可以理解了概念中的通过serialize()函数返回一个包含字节流的字符串这一段话。
 
2  unserialize()函数
 
       unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。在解序列化一个对象前,这个对象的类必须在解序列化之前定义。
 
       简单来理解起来就算将序列化过存储到文件中的数据,恢复到程序代码的变量表示形式的过程,恢复到变量序列化之前的结果。
 
 $s = file_get_contents(‘./目标文本文件'); //取得文本文件的内容(之前序列化过的字符串)
 $变量 = unserialize($s); //将该文本内容,反序列化到指定的变量中
       通过一个例子来了解反序列化:
 
<?php
class User
{

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读