2014-04-26 91 views
0

我有問題喜歡標題說。 我知道這個問題的含義,但我不知道如何解決它在我的具體情況,所以我nedd你的幫助。未定義的偏移量:第55行的1

我有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>"; 
} 

粗線是行:

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

in addItem。

在我看來,當我說:$book = new Item(1, 59.99, 'PHP Cookbook'); PHP應該找到$id 1但他does not。最奇怪的是,結果正在我的屏幕上正確顯示。

回答

1

您從未設置數量(1)。

更換你行

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

由:

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

謝謝,這幫助了我。但是我仍然無法理解你給我的解決方案。 if(isset($ this-> quantities [$ item-> getId()]))我認爲這行總是被設置的,因爲我們已經使用ID創建了一個項目,並且它已正確傳遞。我很困惑,爲什麼我需要這個isset函數? –

+0

這個isset函數只驗證你添加的ID是否已經在數組中。如果不是,我們只設定一個值。 –

+0

在您向我們提供的主要功能中,您尚未傳遞您的物品。因此,您第一次必須使用此ID在陣列中設置一條線。我不確定我是否清楚^^ –