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).";");

posted @ 2016-12-22 21:05  天涯海角路  阅读(106)  评论(0)    收藏  举报