PHP-对象串行化

串行化(序列化)

1.将对象转成字符串(不用看懂这个字符串)--- 串行化

2.将字符串转回对象的过程 --- 反串行化

注意(串行化时机):

1.将对象在网络中传输

2.将对象持久保存,因为在内存里边,随着脚本执行结束,类对象会被从内存中清除掉



//对类对象来串行化

$p = new Person();

//将对象串行化

$str = serialize($p);

//将字符串保存在文件objstr.txt中

file_put_contents("objstr.txt",$str);

echo "对象转完字符串,保存到文件成功......";


//从文件中读出字符串,然后对该字符串反串行化

$str = file_get_contents("objstr.txt");

$obj = unserialize($str);


关于串行化的魔术方法

__sleep()方法,在串行化时,自动调用的方法

作用:可以设置需要串行化的对象的属性,也就是对要串行化的对象部分串行化

1.只要在这个方法中,返回一个数组,在数组中声明了那个属性名,哪个属性就会被串行化,没有在这个数组中的,就不会被串行化。默认这个方法,全部属性都串行化。


__wakeup() 在反串行化时,自动调用的方法

作用:对象串行化回来的对象,进行初始化用的,和__construct(),__clone作用相似


function __sleep(){

echo "只串行化name,age<br/>";

return array("name","age");//表示只对name,age串行化

}

function __wakeup(){

echo "反串行化时,自动调用wakeup这个方法";

$this->age = 12;

}





数据的串行化 json --- javascript object 

<script>

var obj = {

name:"张三",

age:10,

sex:"男",

address :{

email:"xx@163.com"

}

};

alert(obj.name);

</script>


$arr = array("name"=>"zhangsan","age"=>10,"sex"=>"男");

//对数组json串行化

$str = json_encode($arr);//生成标准的json字符串{"name":"tianshanshan","age":23}这样key带引号的就是标准的json字符串。

echo $str;

//反串行化

$pobj = json_decode($str);//转成了对象Object

var_dump($parr);

//第二个参数为true,那么反串行化会变成数组

$parr = json_decode($str,true);//转成数组

echo $parr["name"];


eval()函数 --- 检查并执行php代码

$str = "echo 'abc';";

echo $str; //这里输出 echo 'abc';

eval($str);//这里检查$str是不是合法的php代码,如果合法,就去执行这句代码,结果就会输出abc


var_dump();输出打印格式形式

$arr = array("one"=>1,"two"="222","three"=>333);

var_dump($arr);


var_export();

var_export($arr);//输出打印格式信心,是一个标准的php语法数据

$a = var_export($arr,true);//不输出,返回成字符串赋值给$a;

$b = eval('$b='.var_export($arr,true).";");



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值