PHP 之 串行化与反串行化

对象也是一种在内存中存储的数据类型,他的寿命通常随着生成该对象的程序的终止而终止。有时候可能需要把对象的状态保存下来,需要时再将其回复。串行化是把每个对象转化为二进制字符串。

<?php

class Person {
	var $name;
	var $sex;
	var $age;
	
	function __construct($name = "", $sex = "男", $age = 22) {
		$this->name = $name;
		$this->sex = $sex;
		$this->age = $age;
	}
	
	function say() {
		echo $this->name . "在说话<br/>";
	}
	
	function run() {
		echo "在走路·<br/>";
	}
	
	//串行化的时候自动调用,成员$sex被忽略,只串行$name,$age
	function __sleep() {
		$arr = array("name","age");
		return $arr;
	}
	
	//反串行化时自动调用
	function __wakeup() {
		$this->age = 33;
	}
}

class Student extends Person {
	var $school;
	
	function __construct($name = "", $sex = "男", $age = 22,$school="") {
		parent::__construct($name,$sex,$age);
		$this->school = $school;
	}
	
	function study() {
		echo $this->name."正在".$this->school."学习<br/>";
	}
}

class Teacher extends Student {
	var $wage;
	
	function teaching() {
		echo $this->name."正在".$this->school."教学,每月工资为".$this->wage."<br/>";
	}
	
	//如果调用了不存在的方法,将会自动调用__call(),不会报错
	function __call($functionName,$args) {
		echo "函数名:".$functionName;
		print_r($args);
		echo "<br/>";
	}
}

$teacher1 = new Teacher("kaifu","男",22);

$teacher1->school = "edu";
$teacher1->wage = 4000;

$teacher1->say();
$teacher1->study();
$teacher1->teaching();

$teacher1->hello(1,2,3);
?>

<?php
	require_once 'Person.php';
	
	$teacher = new Teacher("tom","男",22);
	$teacher_str = serialize($teacher);
	
	file_put_contents("file.txt", $teacher_str);
	
	//反串行化
	$objStr = file_get_contents("file.txt");
	$t = unserialize($objStr);
	
	echo $t->age;
?>


串行化 file.txt :O:7:"Teacher":2:{s:4:"name";s:3:"tom";s:3:"age";i:22;}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值