Heim >Backend-Entwicklung >PHP-Tutorial >php:用序列化或session对象让oo进行到底_PHP

php:用序列化或session对象让oo进行到底_PHP

WBOY
WBOYOriginal
2016-06-01 12:32:45969Durchsuche

php:用序列化或session对象让oo进行到底


php支持面向对象编程,这使得我们在编程时可以尽可能使用类及对象来简化

我们的程序,减少代码维护的工作量.

可是由于变量到脚本执行完毕就释放,我们本页所生成的对象想在其它页面使用时

便碰到了麻烦.可是,在很多情况下,有些任务在一两个页面是无法完成的.如果能够

将对象及其方法传递到我们想使用对象的页面,那岂不是个很好的主意.

虽然用get 或post的hide方法传递对象变量然后在新页面建立一新的对象,再然后

用构造函数来初始化新对象,好像也行的通,可是......,很麻烦,想必大家能想像得到吧.

经过长时间的尝试,现总结两种方法来传递对象.

一种,序列化(php4才具有的功能),利用这个功能我们可以将对象序列化,然后在我们需要

的页面将对象变量反序列化来使用.

举例如下:

//*********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         {
            $this->c[$i]=$i;
        }
    }

    function show_var_value()
    {
        echo $this->a.$this->b."
";
        for($i=0;$i         {
            echo "c[$i]=".$this->c[$i]."
";
        }

    }
    
}

?>

//**************a.php 建立对象并序列化**************


require_once("class.php");

$a=new a("hello,","world!");

$s = serialize($a); //序列化对象a

$fp = fopen("store", "w");//以"w"方式打开一文件并获得文件句柄,请在此注意目录属性.

fputs($fp, $s);//写入文件

fclose($fp);//关闭文件句柄

?>

//**************b.php 反序列化对象并调用其方法**************



require_once("class.php");//由于序列化对象不能序列化其方法,所以必须require class.php文件

$s = implode("", @file("store"));

$a = unserialize($s);

$a->show_var_value();

?>



以上例子在win2k server apache2.0.36 php4.2.1调试通过


序列化只能用于有限用户的情况下,因为需要为每个用户建立文件,要主意目录的权限,而且保证文件名不能重复.在用户不能正常退出

浏览器的情况下,不能保证文件被删除.所以这种方法用在后台管理时比较方便.


当用户数量很多时,我们可以用session来保存对象.因为session文件是由系统来管理的,所以我们不必为文件的建立,

删除,目录权限等问题而伤脑筋.示例如下:

//*******************a1.php 将对象注册为session变量****************



require_once("class.php");

session_start();

$_SESSION["a"]=new a("hello,","world!");

?>

//*******************b1.php 使用session变量****************



require_once("class.php");//同样,注册对象为session变量时并不能保存其方法,所以必须require class.php文件

session_start();

$_SESSION["a"]->show_var_value();

?>

以上例子在win98se apache2.0.36 php4.2.1调试通过


附录:现将对象序列化以及注册为session变量的文件粘贴如下,希望有心人能分析出一二来供大家参考.

序列化文件:

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;}}

注:上述文章无版权保护,可以任意修改,传播.如有异议,请mailto:chensiping@sina.com.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn