国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

在PHP下實現持久化

2024-05-04 22:53:45
字體:
來源:轉載
供稿:網友

商業源碼熱門下載www.html.org.cn

在php下實現持久化

“持久化”這個概念是筆者在java中首次接觸到的,通過這個特性,可以將應用程序對象轉化成一系列字節流(這被稱作對象序列化),以適應網絡傳輸或保存。最奇妙的是,被序列化的對象還可以被重新裝配,還原成以前的樣子。這意味著,該機制能自動補償操作系統間的差異。換句話說,一個在windows系統的機器上被序列化的對象可以通過網絡傳輸到一臺linux系統的機器上準確無誤的重新裝配?!俺志没笨梢允箲贸绦驅ο蟛皇軕贸绦蜻\行時間的限制——可以將一個對象序列化,然后保存到磁盤上,在再次需要時進行裝配,能圓滿實現一種“持久”效果。

令人興奮的是,php也支持這一特性,而且從php3就開始支持了,它是通過serialize()和unserialize()這兩個函數來實現的。其實,像asp這樣的開發環境也隱式支持這一特性——在session或application對象中保存應用程序對象就是一種持久化的表現,但遺憾的是,asp并沒有顯式提供這一接口。

在php中,幾乎任何類型(這包括integer、boolean、float、array和object)的變量都可以被序列化。之所以說“幾乎”,是因為唯獨resource類型不支持序列化,這完全是因為php中的resource類型其實是指針的緣故。至于string類型,由于它本身就是字節流,所以根本沒有序列化的必要。

下面將介紹serialize()和unserialize()兩個函數的用法:

string serialize (mixed value):返回value被序列化后的字節流;
mixed unserialize (string str):返回將str進行裝配后的對象。

下面是這兩個函數的應用實例:

<?php
//class.inc.php文件,用于保存類的信息

//用于測試的用戶信息類
class userinfo
{
var $username;
var $password;
var $datetime;
function userinfo($username, $password, $datatime)
{
$this -> username = $username;
$this -> password = $password;
$this -> datetime = $datetime;
}
function output()
{
echo "user information -> <br>";
echo "username: ".$this -> username."<br>";
echo "password: ".$this -> username."<br>";
echo "datetime: ".$this -> username."<br>";
}
}
?>

<?php
//login.php文件,用于注冊新用戶

//導入類文件
require_once("class.inc.php");

//新建對象
$user = new userinfo($_post['username'], $_post['password'], date("y-n-j h:i:s"));
//序列化對象
$user = serialize($user);

//將對象寫入本地數據庫
$con = mysql_connect();
mysql_select_db("test");
mysql_query($con, "insert into testtable (id, userinfo) values ('1', '$user')");
mysql_close($con);
?>

<?php
//userinfo.php文件,用于顯示用戶信息

require_once("class.inc.php");

//從數據庫中取出對象
$con = mysql_connect();
mysql_select_db("test");
$result = mysql_query($con, "select * from testtable where id=1");
$record = mysql_fetch_assoc($result);
$user = unserialize($record['userinfo']);
//輸出用戶信息
$user -> output();
mysql_free($result);
mysql_close($con);
?>

在對象序列化中,最重要的是在“裝配”的頁面中一定要包含該對象的類的定義信息,否則會出現錯誤。當然,上里只是用于測試,在實際的應用中,為了防止序列化后的對象的內容被更改,一般還要對字節流進行“數字簽名”,在裝配時,再對“簽名”進行驗證,以防止對象信息被非法篡改。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄骅市| 宁武县| 义乌市| 淮阳县| 甘肃省| 黔南| 莱州市| 柳州市| 客服| 夏河县| 定陶县| 宝山区| 颍上县| 罗定市| 武定县| 泉州市| 阳新县| 伊金霍洛旗| 新晃| 雷州市| 青海省| 武义县| 晋州市| 山阴县| 车致| 宁远县| 景德镇市| 台州市| 文昌市| 垫江县| 饶河县| 潮州市| 砚山县| 瓦房店市| 丁青县| 兴和县| 八宿县| 呈贡县| 青海省| 汪清县| 积石山|