序列化和反序列
- 在各类语言中,将对象的状态信息转换为可存储或可传输的过程就是序列化,序列化的逆过程就是反序列化
- 序列化和反序列化主要是为了方便对象的传输,通过文件或者网络将序列化的字符串进行传输,最终通过反序列化获取所传输的对象
PHP序列化和反序列化基本类型表达
- 布尔型 b:value => b:0
- 整数型 i:value => i:1
- 字符串型 s:length:value => s:4 “aaaa”
- 数组型 a:<length>:{key,value pairs} => a:1:{i:1;s:1:”a”}
- 对象型 O:<class_name_length>
- NULL型 N
示例代码
序列化
<?php
class man{
public $name;
public $age;
public $height;
function __construct($name,$age,$height){
$this->name = $name;
$this->age = $age;
$this->height = $height;
}
}
$man = new man("amy",18,50);
var_dump(serialize($man));
?>
反序列化
<?php
class man{
public $name;
public $age;
public $height;
function __construct($name,$age,$height){
$this->name = $name;
$this->age = $age;
$this->height = $height;
}
}
$man = 'O:3:"man":3:{s:4:"name";s:3:"amy";s:3:"age";i:18;s:6:"height";i:50;}';
var_dump(unserialize($man));
?>
魔术方法
_construct():创建对象时初始化
_destruction():结束时销毁对象
_toString():对象被当作字符串时使用
_sleep():序列化对象之前调用
_wakeup():反序列化之前调用
_call():调用对象不存在时使用
_get():调用私有属性时使用
反序列化利用
- 魔术方法
- 控制输入变量
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容