## PHP序列化serialize
****序列化對象 - 在會話中存放對象
所有php里面的值都可以使用函數serialize()來返回一個包含字節流的字符串來表示。unserialize()函數能夠重新把字符串變回php原來的值。 序列化一個對象將會保存對象的所有變量,但是不會保存對象的方法,只會保存類的名字。
為了能夠unserialize()一個對象,這個對象的類必須已經定義過。如果序列化類A的一個對象,將會返回一個跟類A相關,而且包含了對象所有變量值的字符串。 如果要想在另外一個文件中解序列化一個對象,這個對象的類必須在解序列化之前定義,可以通過包含一個定義該類的文件或使用函數**spl_autoload_register()**來實現。
~~~
<?php
// page1.php:
include("classa.inc");
$a = new A;
$s = serialize($a);
// 把變量$s保存起來以便文件page2.php能夠讀到
file_put_contents('store', $s);
// page2.php:
// 要正確了解序列化,必須包含下面一個文件
include("classa.inc");
$s = file_get_contents('store');
$a = unserialize($s);
// 現在可以使用對象$a里面的函數 show_one()
$a->show_one();
?>
~~~
當一個應用程序使用函數session_register()來保存對象到會話中時,在每個頁面結束的時候這些對象都會自動序列化,而在每個頁面開始的時候又自動解序列化。 所以一旦對象被保存在會話中,整個應用程序的頁面都能使用這些對象。但是,session_register()這個函數在php5.3.0已經廢棄,而且在php6.0.0就不再支持,所以不要依賴這個函數。
在應用程序中序列化對象以便在之后使用,強烈推薦在整個應用程序都包含對象的類的定義。 不然有可能出現在解序列化對象的時候,沒有找到該對象的類的定義,從而把沒有方法的類__PHP_Incomplete_Class_Name作為該對象的類,導致返回一個沒有用的對象。
所以在上面的例子中,當運行session_register("a"),把變量$a放在會話里之后,需要在每個頁面都包含文件classa.inc,而不是只有文件page1.php和page2.php。
~~~
<?php
class UnSerializer {
public function __construct($filename_with_path) { /* Input the Filename */
$this->filename = $filename_with_path;
if ($this->filename == true) {
return true;
} else {
echo 'File Name Error';
}
}
public function check_file_validity() {
$this->validity = file_exists($this->filename);
if ($this->validity == true) {
return true;
} else {
echo 'File Not Found !';
}
}
public function getting_file_content() {
if ($this->validity == true) {
$this->content = file_get_contents($this->filename);
if ($this->content == true) {
return true;
} else {
echo 'We Can\'t Reach to the Data';
}
} else {
echo 'File Not Found !';
}
}
public function get_unserial_data() {
$this->check_file_validity();
$this->getting_file_content();
if (!is_null($this->content)) {
$this->unserializedval = unserialize($this->content);
if ($this->unserializedval == true) {
return true;
}
} else {
echo 'We Can\'t Reach to the Data';
}
}
public function get_unserialized_value() {
return $this->unserializedval;
}
}
$object = new UnSerializer('example_directory/filename'); /* Enter file name */
$object->get_unserial_data();
var_dump($object->get_unserialized_value());
~~~
- 入門指引
- 簡介
- PHP是什么
- PHP能做什么
- 簡明教程
- 學PHP需要什么
- 我的第一個PHP頁面
- 實用的PHP腳步
- PHP是如何處理表單的
- 在新版本的PHP如何實用舊的PHP代碼
- 下一步需要做什么
- PHP語言參考
- PHP基本語法
- PHP標記
- PHP多進程管理-pcntl_fork
- PHP文件上傳易犯錯誤
- PHP從HTML中分離
- PHP的指令分隔符
- PHP序列化serialize
- PHP類常量
- PHP Traits
- 從 HTML 中分離
- 注釋
- PHP數據類型
- PHP支持的類型簡介
- 布爾類型(Boolean)就是易經知識
- 整型(integer)即整數
- 浮點型(float)
- 字符串(string)
- 數組(Array)
- 對象(object)一定要搞
- 資源類型(resource)
- PHP安裝與環境配置
- 安裝前需要考慮的事項
- Unix系統下安裝PHP
- Unix 系統下安裝 Apache 1.3.x
- Unix 系統下安裝 Apache 2.x
- Unix 系統下安裝 Nginx 1.4.x
- Unix 平臺安裝 Lighttpd 1.4
- Sun Solaris 上的 Sun、iPlanet 和 Netscape 服務器
- CGI 命令行設置
- 針對 HP-UX 平臺的安裝提示
- 在 OpenBSD 系統下的安裝PHP
- Debian GNU/Linux 安裝說明
- 在Mac OS X 系統下安裝PHP
- 使用軟件包
- 使用內置的 PHP
- Windows 系統下的安裝
- 云計算平臺上的安裝
- Microsoft Azure
- 在亞馬遜(Amazon EC2)安裝PHP
- PHP語法參考
- 類型
- NULL
- Callback 回調類型
- 本文檔中使用的偽類型與變量
- 類型轉換的判別
- PHP 類型比較表
- 常量和變量
- 語法基礎
- 預定義變量
- 變量范圍
- 可變變量
- 外部變量
- 常量
- 語法
- 魔術常量
- PHP表達式&運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- continue
- switch
- declare
- return
- require
- include
- require_once