<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

      [摘要]首先,你的session要好使,PHP4.1以上的版本別忘了把php.ini中的register_globle=Off設成register_globle=On,還有就是session.cookie_...
      首先,你的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 
      * @version1.0
      * @copyright
      * @access public
      */
      class a
      {

       /**
       * Description 這是一個簡單變量作為類a的屬性
       * @var 
       * @since 1.0
       * @accessprivate
       */
      var $docid;

      /**
       * Description 這是一個對象變量作為類a的屬性
       * @var 
       * @since 1.0
       * @accessprivate
       */
      var $doc;


      /**
       * Short description.
       * 構造函數
       * Detail description
       * @paramnone
       * @global none
       * @since1.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
       * @paramnone
       * @global none
       * @since1.0
       * @access private
       * @return void
       * @update date time
      */
      function getdocid()//這個函數給自己的docid屬性賦了值
      {
      $this->docid=$this->doc->id;
      } // end func

      /**
       * Short description.
       * 這個函數極簡單,就不解釋啦
       * 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.
      * 這是一個簡單的類
      * Detail description
      * @author 
      * @version1.0
      * @copyright
      * @access public
      */
      class doc
      {

      /**
       * Description 簡單變量作為類doc的屬性
       * @var 
       * @since 1.0
       * @accessprivate
       */
      var $id;



      /**
       * Short description.
       * 這個函數顯示一個錄入界面
       * Detail description
       * @paramnone
       * @global none
       * @since1.0
       * @access private
       * @return void
       * @update date time
      */
      function scr()
      {
      screen();
      } // end func
      /**
       * Short description.
       * 這個函數把上面錄入的值入庫
       * 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");//要產生類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
      * @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.
      * 把這些超文本被作為一個函數的原因,是為了在其他PHP文件中不包含超文本,達到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,回頭我就不用老是自己保存著這個程序啦 ^_^


      日韩精品一区二区三区高清