|
首先,你的session要好使,PHP4.1以上的版本別忘了把php.ini中的register_globle=Off設(shè)成register_globle=On,還有就是session.cookie_path = /,注意這行不可以亂改,有的版本PHP改了這個(gè)設(shè)置session就不好使,這是PHP的一個(gè)BUG. 好了,我假設(shè)你的session已經(jīng)沒問題了,我對下面的例子作個(gè)說明:b.php和a.php各定義了一個(gè)類,其中a.php中的類a稍微復(fù)雜,因?yàn)樗怯蒪.php中的類doc組成的,這叫類的組成關(guān)系.我舉的例子大概是最簡單的類組成關(guān)系的例子啦. c.php中產(chǎn)生了一個(gè)類a的對象叫test,并把它注冊成session變量,c.php還顯示了一個(gè)超文本的表單界面,供你輸入一個(gè)字串.點(diǎn)擊按鈕后,對象test被傳遞到d.php,在下面的程序中,我具體介紹了傳遞對象時(shí)要注意的事項(xiàng).這個(gè)程序是可以實(shí)際運(yùn)行的,它是我學(xué)習(xí)用session傳遞對象的一個(gè)小總結(jié),大家可以回去試試看,祝大家愉快. <? //a.php include("b.php");//包含b.php是因?yàn)閐oc類的定義在b.php中,而類a中的doc屬性是doc類的對象 /** * Short description. * 一個(gè)帶有組成關(guān)系的類 * Detail description * @author * @version1.0 * @copyright * @access public */ class a {
/** * Description 這是一個(gè)簡單變量作為類a的屬性 * @var * @since 1.0 * @accessprivate */ var $docid;
/** * Description 這是一個(gè)對象變量作為類a的屬性 * @var * @since 1.0 * @accessprivate */ var $doc;
/** * Short description. * 構(gòu)造函數(shù) * Detail description * @paramnone * @global none * @since1.0 * @access private * @return void * @update date time */ function a()//類a的構(gòu)造函數(shù),它給自己的doc屬性賦了初值 { $adoc=new doc; $this->doc=$adoc; } // end func /** * Short description. * 給docid賦值 * Detail description * @paramnone * @global none * @since1.0 * @access private * @return void * @update date time */ function getdocid()//這個(gè)函數(shù)給自己的docid屬性賦了值 { $this->docid=$this->doc->id; } // end func
/** * Short description. * 這個(gè)函數(shù)極簡單,就不解釋啦 * Detail description * @paramnone * @global none * @since1.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. * 這是一個(gè)簡單的類 * Detail description * @author * @version1.0 * @copyright * @access public */ class doc {
/** * Description 簡單變量作為類doc的屬性 * @var * @since 1.0 * @accessprivate */ var $id;
/** * Short description. * 這個(gè)函數(shù)顯示一個(gè)錄入界面 * Detail description * @paramnone * @global none * @since1.0 * @access private * @return void * @update date time */ function scr() { screen(); } // end func /** * Short description. * 這個(gè)函數(shù)把上面錄入的值入庫 * Detail description * @paramnone * @global none * @since1.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");//要產(chǎn)生類a的對象須包含定義類a的文件(注意,a.php中不能有超文本,一個(gè)空格都不行,因?yàn)閟ession_start前面有這樣的要求;也不能包含帶有超文本的文件,如果功能要求中必須包含超文本,請做成象下面screen.php那樣的函數(shù)) $test=new a();//產(chǎn)生一個(gè)類a的對象,取名test session_start(); session_register('test');//把對象變量注冊成session變量以便傳遞 include("screen.php");//這時(shí)再包含帶有超文本的文件 $test->doc->scr();//調(diào)用界面顯示
?><? //d.php include("a.php");//要想用session接受前面?zhèn)鬟f的對象變量,必須在session_start()前包含定義該類的文件 session_start(); include("conn.php");//此文件中定義了下句用到的connect()函數(shù)的定義 $conn=connect(); echo "i=$i<br>"; $test->doc->save($conn,$i);//這個(gè)test對象是在c.php中建立,并通過session傳遞過來的,它是這段程序顯示的目的所在, 請注意體會(huì);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. * 這就是一個(gè)普通的mysql連接函數(shù),沒什么特別的 * Detail description * @paramnone * @global none * @since1.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. * 把這些超文本被作為一個(gè)函數(shù)的原因,是為了在其他PHP文件中不包含超文本,達(dá)到PHP程序和超文本分離的目的 * Detail description * @paramnone * @global none * @since1.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,回頭我就不用老是自己保存著這個(gè)程序啦 ^_^
|