反序列化

反序列化

序列化

  • 游戏的存档【把当前的状态进行存储】
  • 序列化和类是捆绑的

函数

serialize()

代码

<?php
	show_source(__FILE__);
	class chybeta{
        var $test = '123';
    }
	$chybeta = new chybeta;
	$chybeta_ser = serialize($chybeta);
	echo "<br>";
	print_r($chybeta_ser);
?>
  • 输出O:7:"chybeta":1:{s:4:"test";s:3:"123";}

O:7:"chybeta":1:{s:4:"test";s:3:"123";}

O:表示是一个Object对象,调用什么类

7:表示当前对象的长度是7个字符串

chybeta:表示当前对象的名字

1:只有一个值

s:字符串类型

4:表示变量的长度

test:表示变量的名字

s:表示值的类型

3:表示值的长度

123:表示值

反序列化

  • 游戏的读档【恢复当时的状态】

函数

unserialize()

代码

<?php
    show_source(__FILE__);
	class chybeta{
        var $test = '123';
    }
	$test = 'O:7:"chybeta":1:{s:4:"test";s:3:"123";}';
	$a = unserialize($test);
    echo "<br>";
    var_dump($a);
?>
  • 输出object(chybeta)#1 (1) { ["test"]=> string(3) "123" }

object(chybeta)#1 (1) { ["test"]=> string(3) "123" }

得到了一个chybeta的类,里面有个test的变量,值是字符串123

魔术方法

什么是方法

  • 方法是类中特有的,其实就是函数的意思,如同你叫小明,和你叫XIAOMING是一样的

什么是魔术方法

  • 魔术方法就是一个机关,满足特定的条件就会自动触发

  • 常见的魔术方法

     __wakeup() //使用unserialize时触发
     
     __sleep() //使用serialize时触发
     
     __construct() //创建对象时触发
     
     __destruct() //对象被销毁时触发
     
     __call() //在对象上下文中调用不可访问的方法时触发
     
     __callStatic() //在静态上下文中调用不可访问的方法时触发
     
     __get() //用于从不可访问的属性读取数据
     
     __set() //用于将数据写入不可访问的属性
     
     __isset() //在不可访问的属性上调用isset()或empty()触发
     
     __unset() //在不可访问的属性上使用unset()时触发
     
     __toString() //把类当作字符串使用时触发
     
     __invoke() //当脚本尝试将对象调用为函数时触发
    
posted @ 2022-07-12 17:23  余星酒  阅读(49)  评论(0)    收藏  举报