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;

  • 类和对象的关系,类似于设计图(蓝图)与生成出的产品之间的关系

属性的权限,可以分为:

  1. public权限 外部可以通过箭头访问到
  2. private权限 内部通过$this->username访问到
  3. 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);



本文链接:

https://youngking.xyz/index.php/archives/814/