php教程

超轻量级php框架startmvc

PHP串行化与反串行化实例分析

更新时间:2020-03-17 03:47 作者:startmvc
本文实例讲述了PHP串行化与反串行化。分享给大家供大家参考,具体如下:对象也是一种在

本文实例讲述了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;}