加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

php反序列化你真的搞懂了吗?php反序列化知识回看

发布时间:2022-04-18 13:24:32 所属栏目:语言 来源:互联网
导读:我们学习完一个知识再实际运用之后,往往会有新的收获,因此,这篇文章主要带大家回顾php反序列化的相关知识,希望能让大家有收获,下面我们就一起来看看吧。 对于所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。序列化一个
       我们学习完一个知识再实际运用之后,往往会有新的收获,因此,这篇文章主要带大家回顾php反序列化的相关知识,希望能让大家有收获,下面我们就一起来看看吧。
 
       对于“所有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序列化格式
 
<?php
class User
{
  public $age = 0;
  public $name = '';
 
  public function PrintData()
  {
    echo 'User '.$this->name.' is '.$this->age.' years old. <br />';
  }
}
//重建对象
$user = unserialize('O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"daye";}');

(编辑:开发网_开封站长网)

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

    热点阅读