php反序列化
类与对象
// 用户类
// 属性和方法的集合
class user{
public $username; // 公有属性
private $password; // 私有属性
protected $userType;
public static $platform="ctf";
// 公共方法
public login(){
echo $this->password;
}
// 公共方法
public logout(){
}
}
类的定义,我们可以认为是设计图
// 实例化一个类 从设计图转换位一个可以用的变量,变量类型不再是字符串或者数字,而是一个对象
$u = new user(); 每个对象中静态属性值不变$p = new user();
$u->username;
$p->username;
- 类和对象的关系,类似于设计图(蓝图)与生成出的产品之间的关系
属性的权限,可以分为:
public
权限 外部可以通过箭头访问到private
权限 内部通过$this->username
访问到protected
权限 表示自身机器子类和父类能够访问
类的继承
普通用户&VIP用户&管理员用户
都属于user
类
class normalUser extends user{
public $score;
public function play(){
echo $this->userType;
}
}
$n = new normalUser();
class vipUser extends user{
public $score;
}
class adminUser extends user{
public $score;
}
类的属性修饰符
public
private
protected
修饰
- 静态属性
static
final属性
类的分类
1. 普通类 没有任何修饰
class user{
public function login(){
}
public function lugout(){
}
}
2. 抽象类
abstract class user{
public function login(){
}
public function logout(){
}
abstract function play();
}
类里面的方法,有些是有详细的实现,有些就只有个方法名字,没具体实现
抽象类 不能被 new 也就是不能被直接 实例化对象
3. 接口式 interface
为了实现多继承效果
extends user
implements 可以实现多个接口
4. trait
可以认为是代码段
5. 匿名类
//一次性匿名类的例子
$v->play(new class{
public $username="我是匿名类";
});
//核心思路 更类似于`伪协议的data伪协议`
序列化与反序列化
如果属性权限为private
,那么序列化后,存储的属性名字为%00+类名+%00+属性名
如果属性权限为protected
,那么序列化后,存储的属性名字为%00+*+%00+属性名
序列化是将一个对象变为一个可以传输的字符串 serialize
返回 序列化后的字符串
反序列化就是将一个可以传输的字符串变为一个可以调用的对象 unserialize(反序列化后的字符串)
返回 对象
$a = "ctf";
echo serialize($a);