一個用session傳遞對象的典型例子,和用物件導向編程的朋友共同分享(轉自CSDN)

來源:互聯網
上載者:User
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,回頭我就不用老是自己儲存著這個程式啦 ^_^

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。