php - 这是编辑/删除/更新其他对象中的对象集合的最佳方法

标签 php oop symfony doctrine-orm object-oriented-database

在我的购物车对象中,我有产品集合

现在,当用户添加或删除产品时,我有两个选择

  1. 删除所有旧产品并保留新产品
  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 与其中的项目总和不匹配),因此请编写简单的函数并尽可能重用它们。

您从主代码中进行的调用应该尽可能简单,并将所有繁重的工作留给对象。这样,您就不会遇到任何意外的错误,您的主要代码很容易阅读/更改,并且您可以对对象充满信心。

关于php - 这是编辑/删除/更新其他对象中的对象集合的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894956/

相关文章:

php - 防止用户打开同一网站的多个实例

php - 将日期转换为此格式

c++ - 强制执行类调用顺序要求

objective-c - 帮助解决编译器警告 : Initialization from distinct Objective-C type when types match

symfony - 如何在routing.yml Symfony2 中声明这两种方法?

routing - 找不到 Symfony 3 路由

php - 如何在 Symfony 2 中创建自定义表单

php - 恶意软件 PHP 文件正在自动创建

php - Laravel 中数据库的复选框值

c++ - OO 设计——在哪里放置非成员函数