一个用session传递对象的典型例子,和用面向对象编程的朋友共同分享(转自CSDN)

session|编程|对象

首先,你的session要好使,PHP4.1以上的版本别忘了把php.ini中的register_globle=Off设成register_globle=On,还有就是session.cookie_path = /,注意这行不可以乱改,有的版本PHP改了这个设置session就不好使,这是PHP的一个BUG.
好了,我假设你的session已经没问题了,我对下面的例子作个说明:b.php和a.php各定义了一个类,其中a.php中的类a稍微复杂,因为它是由b.php中的类doc组成的,这叫类的组成关系.我举的例子大概是最简单的类组成关系的例子啦.
c.php中产生了一个类a的对象叫test,并把它注册成session变量,c.php还显示了一个超文本的表单界面,供你输入一个字串.点击按钮后,对象test被传递到d.php,在下面的程序中,我具体介绍了传递对象时要注意的事项.这个程序是可以实际运行的,它是我学习用session传递对象的一个小总结,大家可以回去试试看,祝大家愉快.
<?
//a.php
include("b.php");//包含b.php是因为doc类的定义在b.php中,而类a中的doc属性是doc类的对象
/**
* Short description.
* 一个带有组成关系的类
* Detail description
* @author       
* @version      1.0
* @copyright    
* @access       public
*/
class a
{
    
       /**
     * Description 这是一个简单变量作为类a的属性
     * @var       
     * @since     1.0
     * @access    private
     */
    var $docid;
    
    /**
     * Description 这是一个对象变量作为类a的属性
     * @var       
     * @since     1.0
     * @access    private
     */
    var $doc;
    
    
    /**
     * Short description.
     * 构造函数
     * Detail description
     * @param      none
     * @global     none
     * @since      1.0
     * @access     private
     * @return     void
     * @update     date time
    */
    function a()//类a的构造函数,它给自己的doc属性赋了初值
    {
        $adoc=new doc;
        $this->doc=$adoc;
    } // end func
    /**
     * Short description.
     * 给docid赋值
     * Detail description
     * @param      none
     * @global     none
     * @since      1.0
     * @access     private
     * @return     void
     * @update     date time
    */
    function getdocid()//这个函数给自己的docid属性赋了值
    {
        $this->docid=$this->doc->id;
    } // end func
    
    /**
     * Short description.
     * 这个函数极简单,就不解释啦
     * Detail description
     * @param      none
     * @global     none
     * @since      1.0
     * @access     private
     * @return     void
     * @update     date time
    */
    function printdocid()//显示doc对象属性的id属性
    {
           echo "doc->id=".$this->doc->id."<br>";
        
    } // end func

} // end class
?>
<?
//b.php
/**
* Short description.
* 这是一个简单的类
* Detail description
* @author       
* @version      1.0
* @copyright    
* @access       public
*/
class doc
{
    
    /**
     * Description 简单变量作为类doc的属性
     * @var       
     * @since     1.0
     * @access    private
     */
    var $id;
    
    
    
    /**
     * Short description.
     * 这个函数显示一个录入界面
     * Detail description
     * @param      none
     * @global     none
     * @since      1.0
     * @access     private
     * @return     void
     * @update     date time
    */
    function scr()
    {
      screen();  
    } // end func
    /**
     * Short description.
     * 这个函数把上面录入的值入库
     * Detail description
     * @param      none
     * @global     none
     * @since      1.0
     * @access     private
     * @return     void
     * @update     date time
    */
    function save($conn,$i)
    {
        $sql="INSERT INTO `test` (`id`, `name`) VALUES ('', '$i')";
        $result=mysql_query($sql,$conn);
        $this->id = mysql_insert_id($conn);
    } // end func
} // end class
?><?
//c.php
include("a.php");//要产生类a的对象须包含定义类a的文件(注意,a.php中不能有超文本,一个空格都不行,因为session_start前面有这样的要求;也不能包含带有超文本的文件,如果功能要求中必须包含超文本,请做成象下面screen.php那样的函数)
$test=new a();//产生一个类a的对象,取名test
session_start();
session_register('test');//把对象变量注册成session变量以便传递
include("screen.php");//这时再包含带有超文本的文件
$test->doc->scr();//调用界面显示

?><?
//d.php
include("a.php");//要想用session接受前面传递的对象变量,必须在session_start()前包含定义该类的文件
session_start();
include("conn.php");//此文件中定义了下句用到的connect()函数的定义
$conn=connect();
echo "i=$i<br>";
$test->doc->save($conn,$i);//这个test对象是在c.php中建立,并通过session传递过来的,它是这段程序显示的目的所在, 请注意体会;test对象的属性和方法被session传递后,依然有效
$test->getdocid();
$test->printdocid();
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<a href="c.php">return</a>
</body>
</html><!--到此为止都是d.php文件中的-->
<?
//conn.php

/**
* Short description.
* 这就是一个普通的mysql连接函数,没什么特别的
* Detail description
* @param      none
* @global     none
* @since      1.0
* @access     private
* @return     void
* @update     date time
*/
function connect()       
{$conn=mysql_connect("localhost","","");
mysql_select_db("test",$conn);
return $conn;
} // end func

?>
<?
//screen.php
/**
* Short description.
* 把这些超文本被作为一个函数的原因,是为了在其他PHP文件中不包含超文本,达到PHP程序和超文本分离的目的
* Detail description
* @param      none
* @global     none
* @since      1.0
* @access     private
* @return     void
* @update     date time
*/
function screen()
{
    ?>
<FORM METHOD=POST ACTION="d.php">
<INPUT TYPE="text" NAME="i">
<INPUT TYPE="submit">
</FORM>    
    <?
} // end func
?>
希望上面的例子能被加到FAQ,回头我就不用老是自己保存着这个程序啦 ^_^

时间: 2024-12-04 10:51:29

一个用session传递对象的典型例子,和用面向对象编程的朋友共同分享(转自CSDN)的相关文章

Android中Intent使用Serializable和Parcelable传递对象

Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个Android工程命名为ObjectTranDemo(类比较

高手来啊!怎么把一个非序列化的对象序列化然后保存到SESSION中!最好是C#代码!先谢谢大家了!

问题描述 高手来啊!怎么把一个非序列化的对象序列化然后保存到SESSION中!最好是C#代码!先谢谢大家了! 解决方案 解决方案二:既然是非序列化的,那么就不能通过序列化来处理对象,如果一定要存到Session中,可以把其主要的属性或字段存到Session中,等需要使用对象的时候,使用New建立新的对象,然后把Session中的值再设置到新的对象中,以此来使用对象.解决方案三:序列化对象了,你就得到一个保存文件地址,然后在Session里面象保存字符串那样保存这个地址就行了.在需要的地方载入在个

ASP.NET页面间传递对象的另类方法

asp.net|对象|页面  我们知道,Asp.net在不同页面间传递对象的时候可以用Session来实现.现在我想介绍另外一种方法来达到目的.     主要思路:我们需要两个页面,一个Sender.aspx负责发送所需传递的对象,一个Receiver.aspx负责接受send过来的对象.Sender.aspx主要是运用了Server.Transfer来终止当前页面的执行,并开始调入Receiver.aspx来取出对象. 具体实现: ITransfer.cs namespace Sunrise.

Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法

Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口.下面我们以一个完整的例子来说明. 1.新建一个Android的工程,其中该工程的目录结构如下图: 2. 修改main.xml布局文件.布局文件的源码如下

Oracle SQL*Loader详解(5) 典型例子

本文介绍SQL*Loader在实际使用过程中经常用到的典型例子. 1. 表中的列比数据文件的列要少怎么办? 假设一个csv的文件如下: a1,a2,a3,a4 b1,b2,b3,b4 c1,c2,c3,c4 d1,d2,d3,d4 总共4列,先要求只要第2.3列数据,怎么办呢?这时候,FILLER(注意:不是FILTER)参数派上用 场了,控制文件如下所示: load data infile 'data.csv' "str '\r\n'" into table test.test ap

通过java套接字传递对象

使用JavaTM远程方法调用(RMI),可以很方便地开发分布式的基于对象的应用程序.RMI的简单性,是由网络通信的费用作为代价的.底层的套接字可以用来开发客户/服务器系统,但是由于大多数Java I/O类和对象不太容易匹配,如何通过套接字传递完成的对象呢?对象序列化是一个允许您以比特流方式读/写完成对象的机制. 将底层的套接字和对象序列化结合在一起,您将得到一个强大的.高效的.可替代RMI的机制,通过套接字来传递对象还能克服使用RMI的高费用的问题. 对象序列化概述 对象序列化机制对于需要将对象

ajax 动态传递jsp等页面使用id辨识传递对象

 本文为大家介绍下使用ajax动态传递jsp等页面,js的jax编写,使用id辨识传递对象 ajax 动态传递页面, js 的ajax编写,使用id辨识传递对象    例如 : 现在有个需求,一个页面,分成左右两块,左侧导航菜单有个用户列表信息功能按钮,想在右侧无刷新情况下加载用户数据,列表显示.    我们定义两个jsp main.jsp userlist.jsp    main.jsp 右侧有个div id='userlist' 层,负责接受通过传递过来的userlist.jsp    us

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{             //动物的接口    public void eat(Food food); //接口中只有抽象的方法和静态常量!这里void前面省略了abstract.同样,变量可以省略static final} class Cat implements Animal //一种动物类:猫  {      public void eat(Food food) //这里是对

Serializable与Parcelable传递对象详解(activity间传递对象方式)

先了解什么是序列化? 序列化是什么:  序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得.  序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输.反序列化就是打开字节流并重构对象.对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据.恢复数据要求有恢复数据的对象实例  序列化的什么特点:  如果某个类能够被序列化,其子类也可以被序列化.声明为static和transient类型的成员数据不能被序列