首页 / PHP / PHP--序列化与反序列化详解
PHP--序列化与反序列化详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP--序列化与反序列化详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2553字,纯文字阅读大概需要4分钟。
内容图文
![PHP--序列化与反序列化详解](/upload/InfoBanner/zyjiaocheng/633/865d9f06668f4328a6e4db196308c0c3.jpg)
PHP--序列化与反序列化详解
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!
说明
学到网络安全的时候用到了序列化和反序列化的操作,感觉挺有用的,首先给出文档地址https://www.php.net/manual/zh/language.oop5.serialization.php
所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。
为了能够unserialize()一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。 如果要想在另外一个文件中解序列化一个对象,这个对象的类必须在解序列化之前定义,可以通过包含一个定义该类的文件或使用函数spl_autoload_register()来实现。
PHP序列化:serialize
序列化是将变量或对象转换成字符串的过程。
<?php
class student{
public $name;
public $age;
public $number;
//_construct:创建对象时初始化
function __construct($name,$age,$number){
$this->name = $name;
$this->age = $age;
$this->number = $number;
}
}
$student = new student("Jack",22,11086);
var_dump(serialize($student));
?>
测试运行
string(76) "O:7:"student":3:{s:4:"name";s:4:"Jack";s:3:"age";i:22;s:6:"number";i:11086;}"
PHP反序列化:unserialize
反序列化是将字符串转换成变量或对象的过程。
<?php
class student{
public $name;
public $age;
public $number;
//_construct:创建对象时初始化
function __construct($name,$age,$number){
$this->name = $name;
$this->age = $age;
$this->number = $number;
}
}
$student = 'O:7:"student":3:{s:4:"name";s:4:"Jack";s:3:"age";i:22;s:6:"number";i:11086;}';
var_dump(unserialize($student));
?>
测试运行
object(student)#1 (3) {
["name"]=>
string(4) "Jack"
["age"]=>
int(22)
["number"]=>
int(11086)
}
魔术函数
函数 | 说明 |
---|---|
__construct() | 类的构造函数 |
__destruct() | 类的析构函数 |
__call() | 在对象中调用一个不可访问方法时调用 |
__callStatic() | 用静态方式中调用一个不可访问方法时调用 |
__get() | 获得一个类的成员变量时调用 |
__set() | 设置一个类的成员变量时调用 |
__isset() | 当对不可访问属性调用isset()或empty()时调用 |
__unset() | 当对不可访问属性调用unset()时被调用 |
__sleep() | 执行serialize()时,先会调用这个函数 |
__wakeup() | 执行unserialize()时,先会调用这个函数 |
__toString() | 类被当成字符串时的回应方法 |
__invoke() | 调用函数的方式调用一个对象时的回应方法 |
__set_state() | 调用var_export()导出类时,此静态方法会被调用 |
__clone | 当对象复制完成时调用 |
__autoload() | 尝试加载未定义的类 |
__debugInfo() | 打印所需调试信息 |
为什么突然说到魔术函数呢,因为在序列化和反序列化的时候经常会用到__construct()
,__destruct()
,__sleep()
,__wakeup()
在后面的博客里面有相应的ctf实例
感谢
万能的网络
以及勤劳的自己
内容总结
以上是互联网集市为您收集整理的PHP--序列化与反序列化详解全部内容,希望文章能够帮你解决PHP--序列化与反序列化详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。