php:用序列化或session對(duì)象讓oo進(jìn)行到底
發(fā)表時(shí)間:2023-07-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]php:用序列化或session對(duì)象讓oo進(jìn)行到底php支持面向?qū)ο缶幊?這使得我們?cè)诰幊虝r(shí)可以盡可能使用類及對(duì)象來(lái)簡(jiǎn)化我們的程序,減少代碼維護(hù)的工作量.可是由于變量到腳本執(zhí)行完畢就釋放,我們本頁(yè)所...
php:用序列化或session對(duì)象讓oo進(jìn)行到底
php支持面向?qū)ο缶幊?這使得我們?cè)诰幊虝r(shí)可以盡可能使用類及對(duì)象來(lái)簡(jiǎn)化
我們的程序,減少代碼維護(hù)的工作量.
可是由于變量到腳本執(zhí)行完畢就釋放,我們本頁(yè)所生成的對(duì)象想在其它頁(yè)面使用時(shí)
便碰到了麻煩.可是,在很多情況下,有些任務(wù)在一兩個(gè)頁(yè)面是無(wú)法完成的.如果能夠
將對(duì)象及其方法傳遞到我們想使用對(duì)象的頁(yè)面,那豈不是個(gè)很好的主意.
雖然用get 或post的hide方法傳遞對(duì)象變量然后在新頁(yè)面建立一新的對(duì)象,再然后
用構(gòu)造函數(shù)來(lái)初始化新對(duì)象,好像也行的通,可是......,很麻煩,想必大家能想像得到吧.
經(jīng)過(guò)長(zhǎng)時(shí)間的嘗試,現(xiàn)總結(jié)兩種方法來(lái)傳遞對(duì)象.
一種,序列化(php4才具有的功能),利用這個(gè)功能我們可以將對(duì)象序列化,然后在我們需要
的頁(yè)面將對(duì)象變量反序列化來(lái)使用.
舉例如下:
//*********class.php 定義類*********
<?
class a
{
var $a;
var $b;
var $c;
function a($x,$y)
{
$this->a=$x;
$this->b=$y;
$this->give_var_value();
}
function give_var_value()
{
for($i=0;$i<100;$i++)
{
$this->c[$i]=$i;
}
}
function show_var_value()
{
echo $this->a.$this->b."<br>";
for($i=0;$i<100;$i++)
{
echo "c[$i]=".$this->c[$i]."<br>";
}
}
}
?>
//**************a.php 建立對(duì)象并序列化**************
<?
require_once("class.php");
$a=new a("hello,","world!");
$s = serialize($a); //序列化對(duì)象a
$fp = fopen("store", "w");//以"w"方式打開一文件并獲得文件句柄,請(qǐng)?jiān)诖俗⒁饽夸泴傩?
fputs($fp, $s);//寫入文件
fclose($fp);//關(guān)閉文件句柄
?>
//**************b.php 反序列化對(duì)象并調(diào)用其方法**************
<?
require_once("class.php");//由于序列化對(duì)象不能序列化其方法,所以必須require class.php文件
$s = implode("", @file("store"));
$a = unserialize($s);
$a->show_var_value();
?>
以上例子在win2k server apache2.0.36 php4.2.1調(diào)試通過(guò)
序列化只能用于有限用戶的情況下,因?yàn)樾枰獮槊總(gè)用戶建立文件,要主意目錄的權(quán)限,而且保證文件名不能重復(fù).在用戶不能正常退出
瀏覽器的情況下,不能保證文件被刪除.所以這種方法用在后臺(tái)管理時(shí)比較方便.
當(dāng)用戶數(shù)量很多時(shí),我們可以用session來(lái)保存對(duì)象.因?yàn)閟ession文件是由系統(tǒng)來(lái)管理的,所以我們不必為文件的建立,
刪除,目錄權(quán)限等問(wèn)題而傷腦筋.示例如下:
//*******************a1.php 將對(duì)象注冊(cè)為session變量****************
<?
require_once("class.php");
session_start();
$_SESSION["a"]=new a("hello,","world!");
?>
//*******************b1.php 使用session變量****************
<?
require_once("class.php");//同樣,注冊(cè)對(duì)象為session變量時(shí)并不能保存其方法,所以必須require class.php文件
session_start();
$_SESSION["a"]->show_var_value();
?>
以上例子在win98se apache2.0.36 php4.2.1調(diào)試通過(guò)
附錄:現(xiàn)將對(duì)象序列化以及注冊(cè)為session變量的文件粘貼如下,希望有心人能分析出一二來(lái)供大家參考.
序列化文件:
O:1:"a":3:{s:1:"a";s:6:"hello,";s:1:"b";s:6:"world!";s:1:"c";a:100:{i:0;i:0;i:1;i:1;i:2;i:2;
i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13;i
:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i:2
2;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:31;
i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;i:
41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:45;i:46;i:46;i:47;i:47;i:48;i:48;i:49;i:49;i:50
;i:50;i:51;i:51;i:52;i:52;i:53;i:53;i:54;i:54;i:55;i:55;i:56;i:56;i:57;i:57;i:58;i:58;i:59;i
:59;i:60;i:60;i:61;i:61;i:62;i:62;i:63;i:63;i:64;i:64;i:65;i:65;i:66;i:66;i:67;i:67;i:68;i:6
8;i:69;i:69;i:70;i:70;i:71;i:71;i:72;i:72;i:73;i:73;i:74;i:74;i:75;i:75;i:76;i:76;i:77;i:77;
i:78;i:78;i:79;i:79;i:80;i:80;i:81;i:81;i:82;i:82;i:83;i:83;i:84;i:84;i:85;i:85;i:86;i:86;i:
87;i:87;i:88;i:88;i:89;i:89;i:90;i:90;i:91;i:91;i:92;i:92;i:93;i:93;i:94;i:94;i:95;i:95;i:96
;i:96;i:97;i:97;i:98;i:98;i:99;i:99;}}
session文件:
a O:1:"a":3:{s:1:"a";s:6:"hello,";s:1:"b";s:6:"world!";s:1:"c";a:100:{i:0;i:0;i:1;i:1;i:2;i:
2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13
;i:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i
:22;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:3
1;i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;
i:41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:45;i:46;i:46;i:47;i:47;i:48;i:48;i:49;i:49;i:
50;i:50;i:51;i:51;i:52;i:52;i:53;i:53;i:54;i:54;i:55;i:55;i:56;i:56;i:57;i:57;i:58;i:58;i:59
;i:59;i:60;i:60;i:61;i:61;i:62;i:62;i:63;i:63;i:64;i:64;i:65;i:65;i:66;i:66;i:67;i:67;i:68;i
:68;i:69;i:69;i:70;i:70;i:71;i:71;i:72;i:72;i:73;i:73;i:74;i:74;i:75;i:75;i:76;i:76;i:77;i:7
7;i:78;i:78;i:79;i:79;i:80;i:80;i:81;i:81;i:82;i:82;i:83;i:83;i:84;i:84;i:85;i:85;i:86;i:86;
i:87;i:87;i:88;i:88;i:89;i:89;i:90;i:90;i:91;i:91;i:92;i:92;i:93;i:93;i:94;i:94;i:95;i:95;i:
96;i:96;i:97;i:97;i:98;i:98;i:99;i:99;}}
注:上述文章無(wú)版權(quán)保護(hù),可以任意修改,傳播.如有異議,請(qǐng)mailto:chensiping@sina.com.