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