如何修改类对象中的数量?购物车类与购物车项类数量调整故障求助
问题分析与解决方法
嘿,我帮你排查下问题所在,主要有两个容易踩的坑:
1. 方法名拼写错误(最直接的原因)
你代码里的setQuanitity和getQuanitity少了一个t!正确的单词拼写是Quantity,所以方法名应该是setQuantity和getQuantity。PHP对方法名的拼写是严格匹配的,这直接导致你调用的方法不存在,自然没法修改数量。
2. 对象与数组的访问方式搞混了
如果$cart[0]是CartItem类的实例(也就是对象),那你不能用数组下标['quantity']的方式去操作它的属性。而且setQuantity方法的作用就是直接修改对象内部的quantity值,不需要把它的返回值再赋值给某个属性。
正确的代码示例
首先确保你的CartItem类方法是正确的:
class CartItem { private $id; private $quantity; private $note; public function __construct($id, $quantity = 1, $note = '') { $this->id = $id; $this->quantity = $quantity; $this->note = $note; } // 正确拼写的getter public function getQuantity() { return $this->quantity; } // 正确拼写的setter,可选返回$this支持链式调用 public function setQuantity($quantity) { // 可以加个合法性校验,防止数量为负数 if ($quantity > 0) { $this->quantity = $quantity; } return $this; } // 别忘了id和note的getter/setter public function getId() { return $this->id; } public function getNote() { return $this->note; } public function setNote($note) { $this->note = $note; return $this; } }
然后修改购物车加量的代码:
// 假设$cart是存储CartItem对象的数组 // 直接调用对象的方法修改数量即可 $cart[0]->setQuantity($cart[0]->getQuantity() + 1);
更优雅的封装(推荐)
为了更符合面向对象的设计,你可以在Cart类里封装“添加商品(含已有商品加量)”的逻辑,这样不用每次都手动处理数组和对象:
class Cart { private $items = []; public function addItem(CartItem $item) { // 先检查购物车是否已有同款商品(按id判断) foreach ($this->items as $existingItem) { if ($existingItem->getId() === $item->getId()) { // 已有则数量+1 $existingItem->setQuantity($existingItem->getQuantity() + 1); return; } } // 没有则新增商品到购物车 $this->items[] = $item; } // 可选:获取购物车所有商品 public function getItems() { return $this->items; } }
之后用户点击“加入购物车”时,只需要这样调用:
// 创建商品实例 $item = new CartItem(1, 1, '备注信息'); // 加入购物车(自动处理新增或加量) $cart->addItem($item);
内容的提问来源于stack exchange,提问作者Jorn Reed
相关产品推荐
相关产品推荐

