php反序列化
type
status
date
slug
tags
summary
category
icon
password
php序列化和反序列化原理
1. 序列化
php序列化是在程序运行的过程中对对象进行转储而产生的,可以将对象转换成字符串,但仅保留对象中的成员变量,不保留函数方法
php序列化的函数为serialize, 反序列化函数为unserialize
对于这个例子:
输出:
解释:
O代表是对象,4代表对象名称有4个字符,Test为对象名称,3代表该对象有3个成员
然后对于变量名和变量用分号隔开,s表示字符串, 1表示有一个字符, 然后是具体字符串;b变量增加了*标识符, 表示其为protected属性, 第三个变量加上类名表示其为private属性, 可以注意到,序列化后函数方法没有被保留
2. 反序列化
例子
输出:
可以看到类的变量被还原了,类方法没有被还原
魔术方法
__construct :当一个对象创建时被调用
__destruct:当一个对象销毁时被调用
__tostring:当一个对象被当做一个字符串使用
__sleep:当对象被序列化之前运行
__wakeup:在对象被反序列化之后被调用
例子:
输出:
出现警告和报错,__sleep函数期望return一个数组, __tostring函数必须返回字符串,修正返回
输出:
看一下这个题:
首先我们要知道:魔术方法
__invoke()
会在将一个对象当作一个方法来使用时会自动调用(然后发现这一点用不到)
我们要知道一下私有属性的赋值手段,然后就有了以下代码再看一下这个题:
首先知道:
__set()
用来给类的实例的不存在的属性或不可访问的属性赋值。
然后倒推,直接上代码,注释是思路(倒着看)上一篇
js拓展记录
下一篇
flask ssti
Loading...