串行化(序列化)
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).";");