2011-06-07 172 views
3

我有一個名爲MyCart的類。php類變量

Class MyCartClass 
{ 
var $MyCart; 

function getCart(){ 
    return $this->MyCart; 
} 

function addItem($item){ 

    if ($this->MyCart){ 
     $this->MyCart .= ','.$item; 
    } 
    else{ 
     $this->MyCart = $item; 
    } 

} 

}; 

$globalCart = new MyCartClass; // create an instance of the class 

可變"$MyCart"是包含在購物車中的所有項目,用逗號分隔的字符串。

現在,我將這個類保存到一個名爲"cart.php"的文件中,並將其包含在另一個文件中。

但是,每次我調用函數"addItem"時,if語句都會轉到else分支,這意味着"$MyCart"變量不包含購物車的當前狀態。

我是否需要將購物車的狀態存儲到「會話」變量中? 導致這種方式它將可以從所有文件確保..

我將不勝感激任何形式的幫助!

謝謝。

+0

我不能看到任何錯誤的代碼,只要你在相同的程序運行(HTTP調用,或其他)調用它。除非您使用會話,否則任何*都不會在HTTP調用之間持續存在。 – 2011-06-07 13:02:06

回答

2

如果你的意思是在請求之間保存,那麼你需要把它放在$ _SESSION中。

否則在一個請求中,您可以使用您的$globalCart而不會丟失您的$myCart變種的內容。

+0

謝謝你「yes123」。看來,除了將其存儲到$ _SESSION中,我想沒有別的辦法。 – george 2011-06-07 13:11:43

5

不要使用字符串來存儲列表。這只是一個糟糕的主意。

相反,存儲$items作爲一個數組,並在構造函數中定義它

class Cart { 

    function __construct() { 
     $this->items = array(); 
    } 

    function add($item) { 
     $this->items[] = $item; 
    } 

    function save() { 
     $SESSION["cart"] = $this->items; 
    } 

    function get_items_string() { 
     return join(",", $this->items); 
    } 

} 

我的PHP是一個有點生疏,但應該讓你開始。

+1

這個問題不是關於如何正確存儲它。 – dynamic 2011-06-07 13:04:22

+0

謝謝。因此,通過將「添加新項目」功能的結果存儲到該數組中不足以在整個站點中保存此結果,對吧?我絕對需要一個會議。那是對的嗎。感謝大家的即時響應! – george 2011-06-07 13:10:19

+2

是的,絕對使用會話,是的,我知道這個問題不是關於如何存儲它,但我認爲OP有錯誤的印象,會話只能存儲字符串,這是不正確的。 – 2011-06-10 15:41:12

1

爲了簡化這只是將數據存儲在一個數組,並使用序列化和反序列化到存儲數據:

Class MyCartClass { 
    var $MyCart = array(); 

    public function __construct(){ 
     $this->MyCart = deserialize($_SESSION['CART']); 
    } 

    public function __destruct(){ 
     $_SESSION['CART'] = serialize($this->MyCart); 
    } 


    function getCart(){ 
     return $this->MyCart; 
    } 

    function addItem($item){ 
     $this->MyCart[] = $item; 
    } 
} 

請注意,我只是寫了這個快速,因爲我沒有沒有運行現在就可以運行它。 :-)

+1

我很確定你不需要序列化會話數據。 – 2011-06-07 13:03:22

0

你甚至可以序列化所有類到$ _SESSION [] ...但通常好主意是存儲會話中的一些id - 例如用戶ID &將所有其他數據存儲在mysql中。每次得到它,需要...