php 序列化

PHP序列化

变量序列化

  • 定义:
    • 序列化是将变量转换成可以保存或传输的字符串的过程;
    • 反序列化就是在需要的时候把已序列化的字符串转换成变量的过程;
  • 作用:序列化有利于数据的存储和传输

序列化函数 serialize()

  • 描述:把变量转换成一个可以存储的值;
  • 语法:string serialize(mixed $value)
  • 参数:$value可以是除资源意外的任意类型数据
  • 返回值:序列化后的字符串
<?php
class Student{
    private $name;
    private $age;
    public function showInfo(){
        echo "{$this->name}的年龄是{$this->age}岁!";
    }
}

//序号化一个对象
$student = new Student();
echo "对象序列化:".serialize($student)."<br>";
//把序列化后端内容存储到本地
file_put_contents('./obj.txt',serialize($student));

//序列化一个数组
$arr = ['PHP','html','css','javascript'];
echo "数组象序列化:".serialize($arr)."<br>";
//把序列化后端内容存储到本地
file_put_contents('./array.txt',serialize($arr));

//序列化一个字符串
$str = "Hello World!";
echo "字符串序列化:".serialize($str)."<br>";
//把序列化后端内容存储到本地
file_put_contents('./string.txt',serialize($str));

?>
    

输出结果

对象序列化:O:7:"Student":2:{s:13:"Studentname";N;s:12:"Studentage";N;}
数组象序列化:a:4:{i:0;s:3:"PHP";i:1;s:4:"html";i:2;s:3:"css";i:3;s:10:"javascript";}
字符串序列化:s:12:"Hello World!";

反序列化函数 unserialize()

  • 描述:把一个已序列化的字符串,创建PHP能识别的值
  • 语法:mixeed unserialize(string $str)
  • 参数:$str为序列化后的字符串
  • 返回值:返回转换后的值,可为integer、float、string、array、或object。如果传递的字符不能反序列化,则返回falsel,并且产生一个E_NOTICE提示信息。
<?php
//把序列化后的对象、数组、和字符串从文件中读取出来
$obj = file_get_contents('./obj.txt');
$arr= file_get_contents('./array.txt');
$str = file_get_contents('./string.txt');

echo "<pre>";
echo "对象序列化内容:".$obj;
echo "<br>反序列化后的内容:<br>";
var_dump(unserialize($obj));

echo "数组序列化内容:".$arr;
echo "<br>反序列化后的内容:<br>";
print_r(unserialize($arr));
echo "字符串序列化内容:".$str;
echo "<br>反序列化后的内容:<br>";
echo unserialize($str);    
    
?>

输出结果

对象序列化内容:O:7:"Student":2:{s:13:"Studentname";N;s:12:"Studentage";N;}反序列化后的内容:
反序列化后的内容:
object(__PHP_Incomplete_Class)#1 (3) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(7) "Student"
  ["name":"Student":private]=>
  NULL
  ["age":"Student":private]=>
  NULL
}
数组序列化内容:a:4:{i:0;s:3:"PHP";i:1;s:4:"html";i:2;s:3:"css";i:3;s:10:"javascript";}
反序列化后的内容:
Array
(
    [0] => PHP
    [1] => html
    [2] => css
    [3] => javascript
)
字符串序列化内容:s:12:"Hello World!";
反序列化后的内容:
Hello World!

对象序列化

  • 对象序列化过程,与其他变量数据一样
  • 对象序列化只会序列化对象的成员属性
  • 当对象序列化时,serialize()函数会检查类中是否存在魔术方法__sleep(),如果存在,则会调用该方法,根据该方法返回的数组指定序列内容。使用该方法可以清理对象,并返回一个需要被序列化的变量名称的数组。
<?php
class Student{
    private $name;
    private $age;
    public function showInfo(){
        echo "{$this->name}的年龄是{$this->age}岁!";
    }
	
    //指定存储的属性,age属性不会被存储
    public function __sleep(){
        return array('name');
    }
}

//序号化一个对象
$student = new Student();
echo "对象序列化:".serialize($student)."<br>";
//把序列化后端内容存储到本地
file_put_contents('./obj.txt',serialize($student));    
    
?>

输出结果

对象序列化:O:7:"Student":1:{s:13:"Studentname";N;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值