序列化物件 - 會話中的對象
serialize() 返回一個字串,包括著可以儲存於 PHP 的任何值的位元組流表示。unserialize() 可以用此字串來重建原始的變量值。用序列化來儲存對象可以儲存物件中的所有變量。物件中的函數不會被儲存,只有類的名稱。 要能夠 unserialize() 一個對象,需要定義該對象的類。也就是,若果序列化了 page1.php 中類 A 的對象 $a,將得到一個指向類 A 的字串並包括有所有 $a 中變量的值。若果要在 page2.php 中將其解序列化,重建類 A 的對象 $a,則 page2.php 中必須要出現類 A 的定義。例如可以這樣實現,將類 A 的定義放在一個包括檔案中,並在 page1.php 和 page2.php 都包括此檔案。
若果在用會話並使用了 session_register() 來註冊對象,這些物件會在每個 PHP 頁面結束時被自動序列化,並在接下來的每個頁面中自動解序列化。基本上是說這些物件一旦成為會話的一部分,就能在任何頁面中出現。 強烈建議在所有的頁面中都內含這些註冊的對象的類的定義,即使並不是在所有的頁面中都用到了這些類。若果沒有這樣做,一個物件被解序列化了但卻沒有其類的定義,它將失去與之關聯的類並成為 stdClass 的一個物件而完全沒有任何可用的函數,這樣就很沒有用處。 因此若果在以上的例子中 $a 通過運行 session_register("a") 成為了會話的一部分,應該在所有的頁面中包括 classa.inc 檔案,而不只是 page1.php 和 page2.php。 | |||||