為什麼要進行物件儲存和傳輸?
一兩個頁面很多時候無法完成特定的功能,但是變數在指令碼執行結束後自動釋放了,我們在其他頁面使用當前頁面建立的物件時就遇到了難題。
為了傳遞物件以及物件的屬性和方法到其他頁面,我們就需要使用物件序列化將物件儲存或傳輸。或者,使用將物件註冊為session變數。
什麼是序列化物件呢?
物件序列化,就是將物件轉換成可以儲存的位元組流。當我們需要把乙個物件在網路中傳輸時或者要把物件寫入檔案或是資料庫時,就需要將物件進行序列化。
序列化物件的過程是怎麼樣的?
兩個步驟:
首先,序列化,就是把物件轉化為二進位制的字串,serialize() 函式用於序列化乙個物件。
然後,反序列化,就是把物件被序列轉化的二進位制字串再轉化為物件,unserialize() 函式來反序列化乙個被序列化的物件。這樣整個過程下來,物件內的型別結構及資料都是完整的。
語法:
string serialize( mixed value )
mixed unserialize( string str [, string callback] )
序列化的例子:
<?php
class
person
function
say()
}$p1 = new person("張三", 20);
$p1_string = serialize($p1);
//將物件序列化後寫入檔案
$fh = fopen("p1.text", "w");
fwrite($fh, $p1_string);
fclose($fh);
?>
開啟 p1.text 檔案,裡面寫入的內容如下:
o:6:」person」:2:
通常不去直接解析上述序列號生產的字元
反序列化
<?php
class
person
function
say()
}$p2 = unserialize(file_get_contents("p1.text"));
$p2 -> say();
?>
輸出結果:
我的名字叫:張三
我的年齡是:20
ps:
1.由於序列化物件不能序列化其方法,所以在 unserialize 的時候,當前檔案必須包含對應的類或者 require 對應的類檔案。
2.序列化只能用於有限使用者的情況下,因為需要為每個使用者單獨儲存或寫入檔案,且保證檔名不能重複。在使用者不能正常退出瀏覽器的情況下,不能保證檔案被刪除。
物件註冊為session變數的例子
當使用者數量很多時,可以考慮用 session 來儲存物件。關於 session 的更多資訊,請參見《php session》。
<?php
session_start();
class
person
function
say()
}$_session["p1"] = new person("張三", 20);
?>
讀取session
<?php
session_start();
class
person
function
say()
}$_session["p1"] -> say();
?>
輸出結果:
我的名字叫:張三
我的年齡是:20
ps:
與序列化一樣,註冊物件為 session 變數時並不能儲存其方法,所以在讀取 session 變數的時候,當前檔案必須包含對應的類或者 require 對應的類檔案。
大腦的無限儲存與記憶傳輸
我們常常被告知大腦是可以不斷儲存資訊的,事實也確實是如此,我們在不斷的學習知識,儲存知識,並且運用知識。我一直認為自己是記憶力非常不好的人,因為我時常會忘記一些事情,包括我學習的知識。但是看完 認知天性 之後,我改變了對自己的誤解。書中提到我們可以通過回憶的方法把知識鞏固到大腦中,這個方法確實很管用...
騰訊雲物件儲存,PHP與JS對接版本
之前在使用其jssdk時,一開始想測試其單獨使用時是否可以使用,便使用了其給的樣例,直接給到其key進行加密。但是使用其樣例中的 ps 這些問題都是前端小夥伴們遇到的 var self this var random parseint math.random math.pow 2,32 var no...
php 定義物件,php的類與物件怎麼定義
在自己學習php的過程中,從零基礎開始 從第一本書的看不懂,到第二本書的有印象了,再到第三本書的操作簡單語句 記不清到底看過多少本了。可 是在應用時,每次到了一些關鍵知識點和核心技術,對其定義和用法會有模糊的感覺,因此特意把覺得比較重要的知識點寫成網路筆記,這樣便於經常翻來溫習。面向過程定義 面向過...