data[$name])) { $this->data[$name] += $count; } else { $this->data[$name] = $count; } } public function remove(string $name) { if (!isset($this->data[$name])) { return; } unset($this->data[$name]); } public function __toString() { $lines = ['Content:']; foreach ($this->data as $name => $count) { $lines[] = " $name : $count"; } $lines[] = ''; return implode("\n", $lines); } // Exercise 2 public function offsetExists($offset): bool { return isset($this->data[$offset]); } public function &offsetGet($offset) { return $this->data[$offset]; } public function offsetSet($offset, $value): void { $this->data[$offset] = $value; } public function offsetUnset($offset): void { if (!isset($this->data[$offset])) { return; } unset($this->data[$offset]); } // private $position = null; public function current() { return $this->data[$this->position]; } public function key() { return $this->position; } public function next(){ next($this->data); $this->position = key($this->data); } public function rewind() { reset($this->data); $this->position = key($this->data); } public function valid() { return isset($this->data[$this->position]); } } // Exercise 1 $cart = new ShoppingCart(); $cart->add('milk', 1); $cart->add('bread', 1); $cart->add('basil', 1); $cart->add('milk', 1); $cart->remove('basil'); print($cart); // Exercise 2 print("Content:\n"); $cart['apple'] = 2; ++$cart['apple']; foreach($cart as $name => $count) { print( " $name : $count\n"); }