2012-08-10 42 views
2

在我的购物车对象,我有产品这是编辑/删除/更新对象的集合中的其他对象

现在集合时,用户添加或删除的产品,我有两个选择的最佳方式

  1. 要么删除所有老产品和新产品持续
  2. 迭代新产品的收集,看看如果那是已经存在。如果不存在,则删除该对象。如果不是还有其添加

哪个是更好的方式

回答

2

,我会采取删除将建立一个接受ID(如型号或数据库ID的对象的函数的方法对于产品),然后该功能贯穿其自己的项目,如果发现匹配的项目将其删除。

至于添加新的项目,有一个函数,再次接受项目ID和武装与该信息从数据库获取所有适用的数据并将其附加到它自己的集合。

想要避免删除一个对象并重新创建它,如果你想改变它的话。尝试使用具有所有功能的对象去完成他们自己需要做的事情。

一些示例代码可能会意味深长岂止:

class shoppingItem 
{ 
    public $ID; 
    public $name; 
    public $price; 
} 

class shoppingCart 
{ 
    public $items=array(); 
    public $totalValue; 

    public function addItem($ID) 
    { 
     $this->items[]= new shoppingItem(); 
     // ... do database stuff to get item details 
     $this->items[]->ID=$dataBaseRow['id']; 
     $this->items[]->name=$dataBaseRow['name']; 
     $this->items[]->price=$dataBaseRow['price']; 
     $this->ammendTotal(); 
    } 

    public function ammendTotal() 
    { 
     // loop all items and get total value. 
     $var=myTotal; 
     $this->totalValue=$var; 
    } 

    public function removeItem($ID) 
    { 
     for($i=0;$i<count($this->items);$i++) 
     { 
      if($this->items[$i]->ID==$ID) 
      { 
       // remove from array or update qty 
      } 
     } 
     $this->ammendTotal(); 
    } 
} 

现在,将项目添加到购物车中,所有你需要做的是这样的:

$shoppingCart->addItem($someID); 

该对象会将其添加到自身中,并对其进行修改并继续。

要删除项目,同样的协议:

$shoppingCart->removeItem($unwantedItemID); 

,并再次,项目删除或更新的数量(无论你选择这样做),它的总再次更新。

基本上保持低维护。永远不要让对象在其中包含不良数据(在这种情况下,如totalValue不匹配其中的项目总和),所以编写简单的函数并在可以的地方重新使用它们。

您从主代码中创建的电话应该尽可能简单,并将所有重要事项留给对象。这样,你不会有任何意想不到的错误,你的主代码很容易读/修改,你可以对这些对象有信心。

+0

是否有任何方法可以一次性将项目集合设置为o或者我必须逐个删除项目,如果要清除所有项目 – user825904 2012-08-10 04:17:52

+0

@ john110016您可以根据需要编写尽可能多的功能。一个'clearAllItems()'函数没有错,它删除所有内容并将'totalValue'设置为零。我在这篇文章中要说的是确保对象可以做你需要它做的一切事情。这只是一个非常简单的例子。也许编写add/delete函数来接受一个数组作为参数?写一大堆其他功能,让它做你想做的所有其他事情。 – Fluffeh 2012-08-10 04:27:22

+0

感谢流感,我会尝试 – user825904 2012-08-10 04:38:04

相关问题