开启辅助访问
帐号登录 |立即注册

详解对象的序列化:传输或保存一个对象的方法

 
创建对象
class Staff
{
public $name ;
public $age;
public $salary;
public function const ruct ($name , $age , $salary=0)
{
$this->name = $name;
$this->age = $age;
$this->salary = $salary;
}
}
$obj1 = new Staff( ' peter' ,28, 5000);
//序列化之前对象属性
echo
' 我的姓名是: ' .$obj1->name , '年龄是: ' .$obj1->age, '工资是:' . $obj1->salary;

输出结果:
我的姓名是:peter年龄是:28工资是:5000

使用 serialize()方法序列化对象(用于保存和传输)
$objStr = serialize($obj1);
echo ' 序列化的对象: ' . $objStr;
输出结果:
序列化的对象:O:5:"Staff":3:
{s:4:" name";s:5:' peter' ;S:3:' 'age' ;i:28;s:6: salary :;:5000;}

在类中定义魔术方法_ sleep(),序列化时会自动调用该方法将指定属性序列化。
public function_ sleep()
{
//将允许序列化的对象属性放在一个数组中返回
return ['name', 'age'];
}
echo ' 序列化的对象: ' . $objStr;
输出结果:
序列化的对象:O:5:"Staff*:2:
{s:4:' 'name' ;s:5:' 'peter ';s:3:' 'age ";i:28;}


//反序列化
$obj2 = unserialize($objStr) ;

echo ' 我的姓名是: ' . $obj1->name, '年龄是: '.$obj1->age;
输出结果:
我的姓名是:peter年龄是:28

在类中定义魔术方法_ wakeup( ) ,在反序列化时自动调用该方法修改对象属性。
public function_ wakeup( )
{
$this->age = 48;

}
输出结果:
我的姓名是:peter年龄是:48

回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

友情链接
  • 艾Q网

    提供设计文章,教程和分享聚合信息与导航工具,最新音乐,动漫,游戏资讯的网站。