2011-04-07 72 views
3

如何將對象類存儲到PHP會話中,然後將其作爲變量存入下一頁。你能幫忙嗎?如何將對象類存儲到PHP中的會話中?

這裏是我的class.inc.php

class shop { 

var $shoeType; 
var $color; 

    public function __construct() { 

     $shoeTypeService = new ShoeTypeService(); 
     $shoe = $shoeTypeService->getAllShoes(); 
     $this->shoeType = $shoe[20]; 
    } 
} 
+1

此問題已被詢問並收到綜合答案。檢查出來:http://stackoverflow.com/questions/871858/php-pass-variable-to-next-page/872522#872522 – 2011-04-07 09:14:30

回答

9

一旦你實例類,你可以把它分配給會話(假設它開始)

$_SESSION['SomeShop'] = new Shop(); 

or 

$Shop = new Shop(); 
//stuff 
$_SESSION['SomeShop'] = $Shop; 

記住,無論你訪問該對象,你將需要商店類包括在內。

+0

你可以用'session_start()'開始會話' – 2011-04-07 09:16:13

+2

__auto_load將負責確保包含正確的類文件 – 2011-04-07 09:40:21

+0

[此答案](https://stackoverflow.com/a/7083544/1150683)另有聲明:在這種情況下,序列化不是必需的。 – 2017-06-27 13:41:41

2

您不能簡單地將對象實例存儲到會話中。否則,該對象將不會在您的下一頁中正確顯示,並且將成爲__PHP_Incomplete_Class的一個實例。 要做到這一點,您需要在第一次調用中您的對象serializeunserialize他們在接下來的調用中具有完整的對象定義和結構。

+0

序列化和反序列化可以很好地通過php內部的 – shxfee 2012-07-03 07:11:39

+0

來處理,以避免PHP_Incomplete_Class問題需要自動加載器。 – 2012-10-10 20:23:16

+0

只有當您沒有包含所需類的文件時,纔會得到不完整的類。使用自動加載器或使用像require_once()這樣的函數應該可以解決這個問題。 – martinstoeckli 2013-09-11 10:46:24

0

擴展Jakes答案它可以做像php中的所有事情一樣麻煩。這裏是一個測試用例:

session_start(); 

$_SESSION['object'] = empty($_SESSION['object'])? (object)array('count' => 0) : $_SESSION['object']; 
echo $_SESSION['object']->count++; 

它會在每次頁面加載時將輸出計數增加1。 但是,當你第一次啓動$ _SESSION變量來檢查它是否已經設置時,你將不得不小心。你不想每次都寫這個值。所以一定要做到:

if (empty($_SESSION['SomeShop'])) 
    $_SESSION['SomeShop'] = new Shop(); 

或更好:

if (!$_SESSION['SomeShop'] instanceof Shop) 
    $_SESSION['SomeShop'] = new Shop(); 
6

在第二頁中使用此代碼 第一頁

$obj = new Object(); 

$_SESSION['obj'] = serialize($obj); 

$obj = unserialize($_SESSION['obj']);