【问题标题】:php class variablesphp类变量
【发布时间】:2011-09-10 01:33:22
【问题描述】:

我有一个名为 MyCart 的类。

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" 变量不包含购物车的当前状态。

我是否需要将购物车的状态存储到“会话”变量中? 因为这样它肯定可以从所有文件中访问..

我将不胜感激任何形式的帮助!

谢谢。

【问题讨论】:

  • 我看不出该代码有什么问题,前提是您在同一程序运行(HTTP 调用或其他)中调用它。 没有任何东西会在 HTTP 调用之间持续存在,除非您使用会话。

标签: php class session variables


【解决方案1】:

不要使用字符串来存储列表。这只是一个坏主意。

相反,将$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 有点生疏了,但应该可以帮助您入门。

【讨论】:

  • 问题不在于如何正确存储它。
  • 谢谢。所以,通过将“添加新项目”函数的结果存储到这个数组中并不足以在整个站点中保存这个结果,对吧?我绝对需要一个会话。那是对的吗。感谢大家的即时回复!
  • 是的,肯定使用会话,是的,我知道问题不在于如何存储它,但我认为 OP 有一个错误的印象,即会话只能存储字符串,这不是不是真的。
【解决方案2】:

如果你的意思是在请求之间保存它,那么是的,你需要把它放在 $_SESSION 中。

否则,在一个请求中,您可以使用您的 $globalCart 而不会丢失您的 $myCart var 的内容。

【讨论】:

  • 谢谢“yes123”。我猜似乎除了将其存储到 $_SESSION 之外别无他法。
【解决方案3】:

为了简化,只需将数据存储在一个数组中,然后使用序列化和反序列化来存储数据:

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;   
    }
}

请注意,我只是快速编写了这篇文章,并没有运行它,因为我现在无权运行它。 :-)

【讨论】:

  • 我很确定您不需要序列化会话数据。
【解决方案4】:

您甚至可以将所有类序列化为 $_SESSION[] ...但通常好主意是在会话中存储一些 id - 例如用户 id 并将所有其他数据存储在 mysql 中。每次都得到它,是需要的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2015-01-28
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多