переменные класса php - PullRequest
       1

переменные класса php

3 голосов
/ 07 июня 2011

У меня есть класс с именем 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" не содержит текущего состояния корзины.

Нужно ли сохранять состояние моей корзины в переменную "сеанс"? Потому что таким образом он будет доступен из всех файлов наверняка ..

Буду признателен за любую помощь!

Спасибо.

Ответы [ 4 ]

5 голосов
/ 07 июня 2011

Не используйте строку для хранения списка.Это просто плохая идея.

Вместо этого, сохраните $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 немного ржавый, но это должно привести кВы начали.

2 голосов
/ 07 июня 2011

Если вы хотите сохранить его между запросами, тогда да, вы должны поместить его в $ _SESSION.

В противном случае в рамках одного запроса вы можете использовать $globalCart и не потерять содержимое вашего $myCart var.

1 голос
/ 07 июня 2011

Чтобы упростить это, просто сохраните данные в массиве и используйте сериализацию и десериализацию для хранения данных:

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

Обратите внимание, я просто написал это быстро и не запустил, потому что у меня нет доступа, чтобы запустить его прямо сейчас. : -)

0 голосов
/ 07 июня 2011

Вы можете даже сериализовать все классы в $ _SESSION [] ... но, как правило, хорошей идеей является сохранение в сеансе некоторого идентификатора - в качестве примера идентификатора пользователя и сохранение всех остальных данных в mysql.Требуется каждый раз, когда это необходимо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...