未定义的偏移量:第55行的1

时间:2014-04-26 17:52:31

标签: php oop undefined offset

我有像标题所说的问题。 我知道这个问题意味着什么但我不知道如何在我的具体情况下解决它,所以我得到了你的帮助。

我有Item.php和Cart.php。在Item.php中,构造函数是:

public function __construct($id, $price, $name) {
    $this->id=$id;
    $this->price=$price;
    $this->name=$name;
}

并且在Cart.php构造函数中是:

public function __construct($items = array()) {
    if(empty($items)){
        $this->items=array();
                    $this->quantities=array();
    } else {
        foreach($items as $key => $value){
            $this->items[]=$value;
                            $this->quantities[$value]++;
                    }
    }

}

和Cart.php中的功能也是:

public function addItem(Item $item, $quantity = 1) {
        for($i=0; $i<$quantity; $i++){
            $this->items[]=$item;
            $this->quantities[$item->getId()]++;
        }

}

主要代码是:

$cart = new Cart();
$book = new Item(1, 59.99, 'PHP Cookbook');
$cart->addItem($book, 10);
foreach($cart->getItems() as $item) {
echo $item->getPrice(), " ", $item->getName(), " ", $cart->getQuantity($item), "<br>";
}

粗线是Line:

$this->quantities[$item->getId()]++; 
方法addItem中的

在我看来,就像我说:$book = new Item(1, 59.99, 'PHP Cookbook'); php应该找到$id 1,但他没有。最奇怪的是,结果在我的屏幕上正确显示。

1 个答案:

答案 0 :(得分:1)

您从未设置数量(1)。

替换你的行

$this->quantities[$item->getId()]++;

by:

if(isset($this->quantities[$item->getId()]))
    $this->quantities($item->getId()]++;
else
    $this->quantities($item->getId()] = 1;