日期:2010-11-03 浏览次数:20519 次
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<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 建立对象并序列化**************
<?
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: