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"); } // Exercise 3 print("JSON\n"); print(createWriter("json")->write($cart)); print("\n\nSTRING\n"); print(createWriter("string")->write($cart)); print("\n"); // Exercise 4 print("Monitoring ...\n"); // Basic. $monitor = CollectStatistics::wrap($cart); $monitor['wrap']->add('tomato', 1); $monitor['wrap']->add('tomato', 1); $monitor['wrap']->add('orange', 1); $monitor['wrap']->remove('bread'); $monitor['wrap']->printStatistics(); // Intermediate. // $monitor = CollectStatistics::wrap($cart); // $monitor['wrap']->add('tomato', 1); // $monitor['wrap']->add('tomato', 1); // $monitor['wrap']->add('orange', 1); // $monitor['wrap']->remove('bread'); // print_r($monitor['statistics']); // Advanced - require more references. // [ // 'wrap' => $monitoredCart, // 'statistics' => &$statistics // ] = CollectStatistics::wrap($cart); // $monitoredCart->add('tomato', 1); // $monitoredCart->add('tomato', 1); // $monitoredCart->add('orange', 1); // $monitoredCart->remove('bread'); // print_r($statistics); /* Expected output: Content: milk : 2 bread : 1 Content: milk : 2 bread : 1 apple : 3 JSON {"milk":2,"bread":1,"apple":3} STRING Concent: milk : 2 bread : 1 apple : 3 Usage: Array ( [add] => 3 [remove] => 1 ) */